summaryrefslogtreecommitdiff
path: root/devel/compiler/Eval.hs
blob: e62336ede853629332f6d83630df8492940dfdf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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