@@ -18,7 +18,7 @@
1818module Main where
1919
2020import Data.Foldable (traverse_)
21−import Data.List (intercalate, isPrefixOf, nub, sortBy, sort, partition)
21+import Data.List (intercalate, isPrefixOf, nub, sortBy, sort)
2222import Data.Maybe (mapMaybe)
2323import Data.Traversable (traverse)
2424import Data.Version (showVersion)
@@ -35,7 +35,6 @@ import Control.Monad.Trans.State.Strict
3535import qualified Control.Monad.Trans.State.Lazy as L
3636
3737import Options.Applicative as Opts
38−import Options.Applicative.Types as Opts
3938
4039import System.Console.Haskeline
4140import System.Directory (createDirectoryIfMissing, getModificationTime, doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
@@ -58,6 +57,7 @@ import Parser
5857
5958data PSCiOptions = PSCiOptions
6059 { psciSingleLineFlag :: Bool
60+ , psciInputNodeFlags :: [String]
6161 , psciInputFile :: [FilePath]
6262 }
6363
@@ -560,8 +560,8 @@ loadUserConfig = do
560560-- |
561561-- The PSCI main loop.
562562--
563−loop :: PSCiOptions -> [String] -> IO ()
564−loop (PSCiOptions singleLineMode files) nflags = do
563+loop :: PSCiOptions -> IO ()
564+loop (PSCiOptions singleLineMode nflags files) = do
565565 config <- loadUserConfig
566566 modulesOrFirstError <- loadAllModules files
567567 case modulesOrFirstError of
@@ -593,19 +593,22 @@ inputFile = strArgument $
593593 metavar "FILE"
594594 <> Opts.help "Optional .purs files to load on start"
595595
596+nodeFlagsFlag :: Parser [String]
597+nodeFlagsFlag = option parser $
598+ long "node-flags"
599+ <> metavar "NODE_FLAGS"
600+ <> Opts.help "Flags to pass to node, separated by spaces"
601+ where
602+ parser = words' <$> str
603+ words' x = traceShow ("words", x) $ words x
604+
596605psciOptions :: Parser PSCiOptions
597606psciOptions = PSCiOptions <$> singleLineFlag
607+ <*> nodeFlagsFlag
598608 <*> many inputFile
599609
600−splitOpts :: PSCiOptions -> (PSCiOptions, [String])
601−splitOpts (opts@PSCiOptions { psciInputFile = fs }) = (opts { psciInputFile = notFlags}, flags)
602− where
603− (flags, notFlags) = partition isFlag fs
604− isFlag ('-':_) = True
605− isFlag _ = False
606−
607610main :: IO ()
608−main = uncurry loop . splitOpts =<< execParser opts
611+main = execParser opts >>= loop
609612 where
610613 opts = info (version <*> helper <*> psciOptions) infoModList
611614 infoModList = fullDesc <> headerInfo <> footerInfo