aboutsummaryrefslogtreecommitdiff
path: root/src/Evaluator.hs
blob: f264ee0cfbc13317a96044f3c6dbd54a5b661e7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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