@@ -44,9 +44,9 @@ readInput (Just input) = fmap collect $ forM input $ \inputFile -> do
44 collect :: [(FilePath, Either ParseError [P.Module])] -> Either ParseError [(FilePath, P.Module)]
44 collect :: [(FilePath, Either ParseError [P.Module])] -> Either ParseError [(FilePath, P.Module)]
45 collect = fmap concat . sequence . map (\(fp, e) -> fmap (map ((,) fp)) e)
45 collect = fmap concat . sequence . map (\(fp, e) -> fmap (map ((,) fp)) e)
47−compile :: P.Options -> Maybe [FilePath] -> Maybe FilePath -> Maybe FilePath -> IO ()
47+compile :: FilePath -> P.Options -> Bool -> [FilePath] -> Maybe FilePath -> Maybe FilePath -> IO ()
48−compile opts input output externs = do
48+compile prelude opts stdin input output externs = do
49− modules <- readInput input
49+ modules <- readInput stdInOrInputFiles
50 case modules of
50 case modules of
51 Left err -> do
51 Left err -> do
52 U.hPutStr stderr $ show err
52 U.hPutStr stderr $ show err
@@ -64,6 +64,11 @@ compile opts input output externs = do
64 Just path -> mkdirp path >> U.writeFile path exts
64 Just path -> mkdirp path >> U.writeFile path exts
65 Nothing -> return ()
65 Nothing -> return ()
66 exitSuccess
66 exitSuccess
68+ stdInOrInputFiles :: Maybe [FilePath]
69+ stdInOrInputFiles | stdin = Nothing
70+ | P.optionsNoPrelude opts = Just input
71+ | otherwise = Just $ prelude : input
68mkdirp :: FilePath -> IO ()
73mkdirp :: FilePath -> IO ()
69mkdirp = createDirectoryIfMissing True . takeDirectory
74mkdirp = createDirectoryIfMissing True . takeDirectory
@@ -127,15 +132,8 @@ verboseErrors = value $ flag $ (optInfo [ "v", "verbose-errors" ])
127options :: Term P.Options
132options :: Term P.Options
128options = P.Options <$> noPrelude <*> noTco <*> performRuntimeTypeChecks <*> noMagicDo <*> runMain <*> noOpts <*> (Just <$> browserNamespace) <*> dceModules <*> codeGenModules <*> verboseErrors
133options = P.Options <$> noPrelude <*> noTco <*> performRuntimeTypeChecks <*> noMagicDo <*> runMain <*> noOpts <*> (Just <$> browserNamespace) <*> dceModules <*> codeGenModules <*> verboseErrors
130−stdInOrInputFiles :: FilePath -> Term (Maybe [FilePath])
131−stdInOrInputFiles prelude = combine <$> useStdIn <*> (not <$> noPrelude) <*> inputFiles
133− combine False True input = Just (prelude : input)
134− combine False False input = Just input
135− combine True _ _ = Nothing
137term :: FilePath -> Term (IO ())
135term :: FilePath -> Term (IO ())
138−term prelude = compile <$> options <*> stdInOrInputFiles prelude <*> outputFile <*> externsFile
136+term prelude = compile prelude <$> options <*> useStdIn <*> inputFiles <*> outputFile <*> externsFile
140termInfo :: TermInfo
138termInfo :: TermInfo
141termInfo = defTI
139termInfo = defTI