@@ -10,6 +10,7 @@ module Idris.Package.Parser where
1010
1111import  Idris.CmdOptions 
1212import  Idris.Imports 
13+ import  Idris.Options  (Opt )
1314import  Idris.Package.Common 
1415import  Idris.Parser  (moduleName )
1516import  Idris.Parser.Helpers  (Parser , Parsing , eol , iName , identifier , isEol ,
@@ -19,6 +20,7 @@ import Idris.Parser.Helpers (Parser, Parsing, eol, iName, identifier, isEol,
1920import  Control.Applicative 
2021import  Control.Monad.State.Strict 
2122import  Data.List  (union )
23+ import  qualified  Options.Applicative  as  Opts 
2224import  System.Directory  (doesFileExist )
2325import  System.Exit 
2426import  System.FilePath  (isValid , takeExtension , takeFileName )
@@ -109,11 +111,19 @@ clause name p f = do value <- reserved name *> lchar '=' *> p <* someSpace
109111commaSep    ::  Parsing  m  =>  m  a  ->  m  [a ]
110112commaSep p =  P. sepBy1 p (lchar ' ,' 
111113
114+ pOptions  ::  PParser  [Opt ]
115+ pOptions =  do 
116+   str <-  stringLiteral
117+   case  execArgParserPure (words  str) of 
118+     Opts. Success->  return  a
119+     Opts. Failure->  fail  $  fst  $  Opts. renderFailure e " " 
120+     _              ->  fail  " Unexpected error" 
121+ 
112122pClause  ::  PParser  () 
113123pClause =  clause " executable" \ st v ->  st { execout =  Just  v })
114124      <|>  clause " main" [] ) (\ st v ->  st { idris_main =  Just  v })
115125      <|>  clause " sourcedir" \ st v ->  st { sourcedir =  v })
116-       <|>  clause " opts" (pureArgParser  .   words   <$>  stringLiteral)  (\ st v ->  st { idris_opts =  v ++  idris_opts st })
126+       <|>  clause " opts" pOptions  (\ st v ->  st { idris_opts =  v ++  idris_opts st })
117127      <|>  clause " pkgs" <*  someSpace)) (\ st ps -> 
118128             let  pkgs =  pureArgParser $  concatMap  (\ x ->  [" -p" show  x]) ps
119129             in  st { pkgdeps    =  ps `union`  pkgdeps st
0 commit comments