git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
First pass at binds.
commit573a4158cbf126704f648265537bba914c50117a authorjoneshf <jones3.hardy@gmail.com> dateTue 18 Feb 2014, 02:21 (13 years ago) parent2410dad
1 file changed+23−16
psci/Main.hs+23−16
psci/Main.hs+23−16
@@ -73,14 +73,14 @@ completion ms = completeWord Nothing " \t\n\r" findCompletions
7373 getDeclName _ = Nothing
7474
7575createTemporaryModule :: [P.ProperName] -> [P.DoNotationElement] -> P.Value -> P.Module
76−createTemporaryModule imports lets value =
76+createTemporaryModule imports binders value =
7777 let
7878 moduleName = P.ModuleName [P.ProperName "Main"]
7979 importDecl m = P.ImportDeclaration m Nothing
8080 traceModule = P.ModuleName [P.ProperName "Trace"]
8181 trace = P.Var (P.Qualified (Just traceModule) (P.Ident "print"))
8282 mainDecl = P.ValueDeclaration (P.Ident "main") [] Nothing
83− (P.Do (lets ++
83+ (P.Do (binders ++
8484 [ P.DoNotationBind (P.VarBinder (P.Ident "it")) value
8585 , P.DoNotationValue (P.App trace (P.Var (P.Qualified Nothing (P.Ident "it"))) )
8686 ]))
@@ -88,8 +88,8 @@ createTemporaryModule imports lets value =
8888 P.Module moduleName $ map (importDecl . P.ModuleName . return) imports ++ [mainDecl]
8989
9090handleDeclaration :: [P.Module] -> [P.ProperName] -> [P.DoNotationElement] -> P.Value -> InputT IO ()
91−handleDeclaration loadedModules imports lets value = do
92− let m = createTemporaryModule imports lets value
91+handleDeclaration loadedModules imports binders value = do
92+ let m = createTemporaryModule imports binders value
9393 case P.compile options (loadedModules ++ [m]) of
9494 Left err -> outputStrLn err
9595 Right (js, _, _) -> do
@@ -113,6 +113,9 @@ parseDoNotationLet = P.DoNotationLet <$> (P.reserved "let" *> P.indented *> P.pa
113113parseDoNotationBind :: Parsec.Parsec String P.ParseState P.DoNotationElement
114114parseDoNotationBind = P.DoNotationBind <$> P.parseBinder <*> (P.indented *> P.reservedOp "<-" *> P.parseValue)
115115
116+parseExpression :: Parsec.Parsec String P.ParseState P.Value
117+parseExpression = P.whiteSpace *> P.parseValue <* Parsec.eof
118+
116119main :: IO ()
117120main = do
118121 preludeFilename <- getPreludeFilename
@@ -131,29 +134,33 @@ main = do
131134 go defaultImports prelude []
132135 where
133136 go :: [P.ProperName] -> [P.Module] -> [P.DoNotationElement] -> InputT IO ()
134− go imports loadedModules lets = do
137+ go imports loadedModules binders = do
135138 cmd <- getCommand
136139 case cmd of
137− Empty -> go imports loadedModules lets
138− Expression ls -> do
139− case P.runIndentParser "" (P.whiteSpace *> P.parseValue <* Parsec.eof) (unlines ls) of
140− Left err -> outputStrLn (show err)
141− Right decl -> handleDeclaration loadedModules imports lets decl
142− go imports loadedModules lets
143− Import moduleName -> go (imports ++ [P.ProperName moduleName]) loadedModules lets
140+ Empty -> go imports loadedModules binders
141+ Expression ls ->
142+ case P.runIndentParser "" parseDoNotationBind (unlines ls) of
143+ Left _ ->
144+ case P.runIndentParser "" parseExpression (unlines ls) of
145+ Left err -> outputStrLn (show err)
146+ Right decl -> do
147+ handleDeclaration loadedModules imports binders decl
148+ go imports loadedModules binders
149+ Right binder -> go imports loadedModules (binders ++ [binder])
150+ Import moduleName -> go (imports ++ [P.ProperName moduleName]) loadedModules binders
144151 Let line -> do
145152 moreLets <- case P.runIndentParser "" parseDoNotationLet line of
146− Left err -> outputStrLn (show err) >> return lets
147− Right l -> return $ lets ++ [l]
153+ Left err -> outputStrLn (show err) >> return binders
154+ Right l -> return $ binders ++ [l]
148155 go imports loadedModules moreLets
149156 LoadModule moduleFile -> do
150157 ms <- lift $ loadModule moduleFile
151158 case ms of
152159 Left err -> outputStrLn err
153− Right ms' -> go imports (loadedModules ++ ms') lets
160+ Right ms' -> go imports (loadedModules ++ ms') binders
154161 Reload -> do
155162 preludeFilename <- lift getPreludeFilename
156163 (Right prelude) <- lift $ loadModule preludeFilename
157− go defaultImports prelude lets
164+ go defaultImports prelude binders
158165
159166