module Eval where
import AbsSrc
import AbsTgt
import qualified Data.Map as M
eval :: Env -> Exp -> Val
eval env e = case e of
ECon c -> look c
EStr s -> VTok s
ECat x y -> VCat (ev x) (ev y)
where
look = lookCons env
ev = eval env
data Env = Env {
constants :: M.Map Ident Val
}
lookCons :: Env -> Ident -> Val
lookCons env c = maybe undefined id $ M.lookup c $ constants env