aboutsummaryrefslogtreecommitdiff
path: root/src/Main.hs
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-06-06 13:56:54 +0200
committerCharles <sircharlesaze@gmail.com>2020-06-06 14:19:15 +0200
commit22d41fc6a5b0f55dab587b43f1c7fc9ef4b40065 (patch)
tree4055b2cfa98ef2a3661b727193e0f747b01cb9f7 /src/Main.hs
parentf5ddd91d290a0c508e04cce2cb19c4c8bae32835 (diff)
downloadcomputorv2-master.tar.gz
computorv2-master.tar.bz2
computorv2-master.zip
Ugly and not working function value reduction, main evaluation refactoringHEADmaster
Diffstat (limited to 'src/Main.hs')
-rw-r--r--src/Main.hs28
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