From 0775dea2bc79cb1b5ee56f74f8076fc30a394127 Mon Sep 17 00:00:00 2001 From: Akshay Date: Thu, 8 Oct 2020 10:53:41 +0530 Subject: init --- src/Evaluator.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/Evaluator.hs (limited to 'src/Evaluator.hs') 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 @@ +module Evaluator ( + eval + ) where + +import Operators +import Parser +import Text.ParserCombinators.Parsec + +apply :: String -> [Expr] -> Expr +apply fn args = + case lookup fn primitives of + Just f -> f args + _ -> BoolLiteral False -- TODO: error out instead + +eval :: Expr -> Expr +eval v@(StringLiteral s) = v +eval v@(IntLiteral i) = v +eval v@(BoolLiteral b) = v +-- handle quotes as literals +eval (List[Id "quote", val]) = val +eval (List (Id fn : args)) = apply fn $ map eval args + -- cgit v1.2.3