diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-06-06 13:56:54 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-06 14:19:15 +0200 |
| commit | 22d41fc6a5b0f55dab587b43f1c7fc9ef4b40065 (patch) | |
| tree | 4055b2cfa98ef2a3661b727193e0f747b01cb9f7 /src/Main.hs | |
| parent | f5ddd91d290a0c508e04cce2cb19c4c8bae32835 (diff) | |
| download | computorv2-master.tar.gz computorv2-master.tar.bz2 computorv2-master.zip | |
Diffstat (limited to 'src/Main.hs')
| -rw-r--r-- | src/Main.hs | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/src/Main.hs b/src/Main.hs index f54cf7a..9a87d99 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -26,32 +26,24 @@ promptLoop context = do eval :: Statement -> Context -> InputT IO Context -eval (Evaluation e) c = do case E.eval e c of - Just evaluated -> outputStrLn $ show evaluated - Nothing -> outputStrLn "Error: couldn't evaluate expression" - return c +eval (Evaluation e) c = evalOutput (E.eval e c) c (id . const) -eval (VariableDeclaration name value) (Context vars funcs) = - case E.eval value context of - Just e -> do outputStrLn $ show e - return $ Context (M.insert name e vars) funcs - Nothing -> outputStrLn "Error: couldn't evaluate expression" >> return context - where context = Context vars funcs +eval (VariableDeclaration name value) c = evalOutput (E.eval value c) c nextContext + where nextContext (Context vs fs) e = Context (M.insert name e vs) fs -eval (FunctionDeclaration name argName e) (Context vars funcs) = - -- case evalIgnore e context argName of - -- Just e -> do outputStrLn $ show e - -- return $ Context vars (M.insert name (argName, e) funcs) - -- Nothing -> outputStrLn "Error: couldn't evaluate expression" >> return context - -- - -- where context = Context vars funcs - return $ Context vars (M.insert name (argName, e) funcs) +eval (FunctionDeclaration name argName value) c = evalOutput (evalIgnored value c argName) c nextContext + where nextContext (Context vs fs) e = Context vs (M.insert name (argName, e) fs) eval _ c = return c -- eval (PolynomEvaluation left right) c = do l <- eval left -- count number of unknoewn -- r <- eval right +evalOutput :: Maybe Expr -> Context -> (Context -> Expr -> Context) -> InputT IO Context +evalOutput (Just evaluated) c f = do outputStrLn $ show evaluated + return $ f c evaluated +evalOutput Nothing c _ = outputStrLn "Error: couldn't evaluate expression" >> return c + putEnv :: Context -> InputT IO Context putEnv (Context vars funcs) = do |
