@@ -18,7 +18,7 @@
18module Main where
18module Main where
20import Data.Foldable (traverse_)
20import Data.Foldable (traverse_)
21−import Data.List (intercalate, isPrefixOf, nub, sortBy, sort, partition)
21+import Data.List (intercalate, isPrefixOf, nub, sortBy, sort)
22import Data.Maybe (mapMaybe)
22import Data.Maybe (mapMaybe)
23import Data.Traversable (traverse)
23import Data.Traversable (traverse)
24import Data.Version (showVersion)
24import Data.Version (showVersion)
@@ -35,7 +35,6 @@ import Control.Monad.Trans.State.Strict
35import qualified Control.Monad.Trans.State.Lazy as L
35import qualified Control.Monad.Trans.State.Lazy as L
37import Options.Applicative as Opts
37import Options.Applicative as Opts
38−import Options.Applicative.Types as Opts
40import System.Console.Haskeline
39import System.Console.Haskeline
41import System.Directory (createDirectoryIfMissing, getModificationTime, doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
40import System.Directory (createDirectoryIfMissing, getModificationTime, doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
@@ -58,6 +57,7 @@ import Parser
59data PSCiOptions = PSCiOptions
58data PSCiOptions = PSCiOptions
60 { psciSingleLineFlag :: Bool
59 { psciSingleLineFlag :: Bool
60+ , psciInputNodeFlags :: [String]
61 , psciInputFile :: [FilePath]
61 , psciInputFile :: [FilePath]
@@ -560,8 +560,8 @@ loadUserConfig = do
561-- The PSCI main loop.
561-- The PSCI main loop.
563−loop :: PSCiOptions -> [String] -> IO ()
563+loop :: PSCiOptions -> IO ()
564−loop (PSCiOptions singleLineMode files) nflags = do
564+loop (PSCiOptions singleLineMode nflags files) = do
565 config <- loadUserConfig
565 config <- loadUserConfig
566 modulesOrFirstError <- loadAllModules files
566 modulesOrFirstError <- loadAllModules files
567 case modulesOrFirstError of
567 case modulesOrFirstError of
@@ -593,19 +593,22 @@ inputFile = strArgument $
593 metavar "FILE"
593 metavar "FILE"
594 <> Opts.help "Optional .purs files to load on start"
594 <> Opts.help "Optional .purs files to load on start"
596+nodeFlagsFlag :: Parser [String]
597+nodeFlagsFlag = option parser $
599+ <> metavar "NODE_FLAGS"
600+ <> Opts.help "Flags to pass to node, separated by spaces"
602+ parser = words' <$> str
603+ words' x = traceShow ("words", x) $ words x
596psciOptions :: Parser PSCiOptions
605psciOptions :: Parser PSCiOptions
597psciOptions = PSCiOptions <$> singleLineFlag
606psciOptions = PSCiOptions <$> singleLineFlag
598 <*> many inputFile
608 <*> many inputFile
600−splitOpts :: PSCiOptions -> (PSCiOptions, [String])
601−splitOpts (opts@PSCiOptions { psciInputFile = fs }) = (opts { psciInputFile = notFlags}, flags)
603− (flags, notFlags) = partition isFlag fs
604− isFlag ('-':_) = True
607main :: IO ()
610main :: IO ()
608−main = uncurry loop . splitOpts =<< execParser opts
611+main = execParser opts >>= loop
610 opts = info (version <*> helper <*> psciOptions) infoModList
613 opts = info (version <*> helper <*> psciOptions) infoModList
611 infoModList = fullDesc <> headerInfo <> footerInfo
614 infoModList = fullDesc <> headerInfo <> footerInfo