@@ -73,14 +73,14 @@ completion ms = completeWord Nothing " \t\n\r" findCompletions
73 getDeclName _ = Nothing
73 getDeclName _ = Nothing
75createTemporaryModule :: [P.ProperName] -> [P.DoNotationElement] -> P.Value -> P.Module
75createTemporaryModule :: [P.ProperName] -> [P.DoNotationElement] -> P.Value -> P.Module
76−createTemporaryModule imports lets value =
76+createTemporaryModule imports binders value =
78 moduleName = P.ModuleName [P.ProperName "Main"]
78 moduleName = P.ModuleName [P.ProperName "Main"]
79 importDecl m = P.ImportDeclaration m Nothing
79 importDecl m = P.ImportDeclaration m Nothing
80 traceModule = P.ModuleName [P.ProperName "Trace"]
80 traceModule = P.ModuleName [P.ProperName "Trace"]
81 trace = P.Var (P.Qualified (Just traceModule) (P.Ident "print"))
81 trace = P.Var (P.Qualified (Just traceModule) (P.Ident "print"))
82 mainDecl = P.ValueDeclaration (P.Ident "main") [] Nothing
82 mainDecl = P.ValueDeclaration (P.Ident "main") [] Nothing
83− (P.Do (lets ++
83+ (P.Do (binders ++
84 [ P.DoNotationBind (P.VarBinder (P.Ident "it")) value
84 [ P.DoNotationBind (P.VarBinder (P.Ident "it")) value
85 , P.DoNotationValue (P.App trace (P.Var (P.Qualified Nothing (P.Ident "it"))) )
85 , P.DoNotationValue (P.App trace (P.Var (P.Qualified Nothing (P.Ident "it"))) )
@@ -88,8 +88,8 @@ createTemporaryModule imports lets value =
88 P.Module moduleName $ map (importDecl . P.ModuleName . return) imports ++ [mainDecl]
88 P.Module moduleName $ map (importDecl . P.ModuleName . return) imports ++ [mainDecl]
90handleDeclaration :: [P.Module] -> [P.ProperName] -> [P.DoNotationElement] -> P.Value -> InputT IO ()
90handleDeclaration :: [P.Module] -> [P.ProperName] -> [P.DoNotationElement] -> P.Value -> InputT IO ()
91−handleDeclaration loadedModules imports lets value = do
91+handleDeclaration loadedModules imports binders value = do
92− let m = createTemporaryModule imports lets value
92+ let m = createTemporaryModule imports binders value
93 case P.compile options (loadedModules ++ [m]) of
93 case P.compile options (loadedModules ++ [m]) of
94 Left err -> outputStrLn err
94 Left err -> outputStrLn err
95 Right (js, _, _) -> do
95 Right (js, _, _) -> do
@@ -113,6 +113,9 @@ parseDoNotationLet = P.DoNotationLet <$> (P.reserved "let" *> P.indented *> P.pa
113parseDoNotationBind :: Parsec.Parsec String P.ParseState P.DoNotationElement
113parseDoNotationBind :: Parsec.Parsec String P.ParseState P.DoNotationElement
114parseDoNotationBind = P.DoNotationBind <$> P.parseBinder <*> (P.indented *> P.reservedOp "<-" *> P.parseValue)
114parseDoNotationBind = P.DoNotationBind <$> P.parseBinder <*> (P.indented *> P.reservedOp "<-" *> P.parseValue)
116+parseExpression :: Parsec.Parsec String P.ParseState P.Value
117+parseExpression = P.whiteSpace *> P.parseValue <* Parsec.eof
116main :: IO ()
119main :: IO ()
118 preludeFilename <- getPreludeFilename
121 preludeFilename <- getPreludeFilename
@@ -131,29 +134,33 @@ main = do
131 go defaultImports prelude []
134 go defaultImports prelude []
133 go :: [P.ProperName] -> [P.Module] -> [P.DoNotationElement] -> InputT IO ()
136 go :: [P.ProperName] -> [P.Module] -> [P.DoNotationElement] -> InputT IO ()
134− go imports loadedModules lets = do
137+ go imports loadedModules binders = do
135 cmd <- getCommand
138 cmd <- getCommand
136 case cmd of
139 case cmd of
137− Empty -> go imports loadedModules lets
140+ Empty -> go imports loadedModules binders
138− Expression ls -> do
141+ Expression ls ->
139− case P.runIndentParser "" (P.whiteSpace *> P.parseValue <* Parsec.eof) (unlines ls) of
142+ case P.runIndentParser "" parseDoNotationBind (unlines ls) of
144+ case P.runIndentParser "" parseExpression (unlines ls) of
140− Left err -> outputStrLn (show err)
145+ Left err -> outputStrLn (show err)
141− Right decl -> handleDeclaration loadedModules imports lets decl
147+ handleDeclaration loadedModules imports binders decl
142− go imports loadedModules lets
148+ go imports loadedModules binders
149+ Right binder -> go imports loadedModules (binders ++ [binder])
143− Import moduleName -> go (imports ++ [P.ProperName moduleName]) loadedModules lets
150+ Import moduleName -> go (imports ++ [P.ProperName moduleName]) loadedModules binders
144 Let line -> do
151 Let line -> do
145 moreLets <- case P.runIndentParser "" parseDoNotationLet line of
152 moreLets <- case P.runIndentParser "" parseDoNotationLet line of
146− Left err -> outputStrLn (show err) >> return lets
153+ Left err -> outputStrLn (show err) >> return binders
147− Right l -> return $ lets ++ [l]
154+ Right l -> return $ binders ++ [l]
148 go imports loadedModules moreLets
155 go imports loadedModules moreLets
149 LoadModule moduleFile -> do
156 LoadModule moduleFile -> do
150 ms <- lift $ loadModule moduleFile
157 ms <- lift $ loadModule moduleFile
151 case ms of
158 case ms of
152 Left err -> outputStrLn err
159 Left err -> outputStrLn err
153− Right ms' -> go imports (loadedModules ++ ms') lets
160+ Right ms' -> go imports (loadedModules ++ ms') binders
154 Reload -> do
161 Reload -> do
155 preludeFilename <- lift getPreludeFilename
162 preludeFilename <- lift getPreludeFilename
156 (Right prelude) <- lift $ loadModule preludeFilename
163 (Right prelude) <- lift $ loadModule preludeFilename
157− go defaultImports prelude lets
164+ go defaultImports prelude binders