aboutsummaryrefslogtreecommitdiff
path: root/src/Evaluator.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Evaluator.hs')
-rw-r--r--src/Evaluator.hs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/Evaluator.hs b/src/Evaluator.hs
new file mode 100644
index 0000000..f264ee0
--- /dev/null
+++ b/src/Evaluator.hs
@@ -0,0 +1,22 @@
1module Evaluator (
2 eval
3 ) where
4
5import Operators
6import Parser
7import Text.ParserCombinators.Parsec
8
9apply :: String -> [Expr] -> Expr
10apply fn args =
11 case lookup fn primitives of
12 Just f -> f args
13 _ -> BoolLiteral False -- TODO: error out instead
14
15eval :: Expr -> Expr
16eval v@(StringLiteral s) = v
17eval v@(IntLiteral i) = v
18eval v@(BoolLiteral b) = v
19-- handle quotes as literals
20eval (List[Id "quote", val]) = val
21eval (List (Id fn : args)) = apply fn $ map eval args
22