blob: f06c34d6dfd2f9e47146053ddf1092fc4a806bc6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
module TMacros where
import AbsTgt
appVal :: Val -> [Val] -> Val
appVal v vs = compVal vs v
compVal :: [Val] -> Val -> Val
compVal args = comp where
comp val = case val of
VRec vs -> VRec $ map comp vs
VPro r p -> case (comp r, comp p) of
(VRec vs, VPar i) -> vs !! fromInteger i
(r',p') -> VPro r' p' ---- not at runtime
VArg j
| i < length args -> args !! i ---- not needed at runtime
| otherwise -> val ---- not the right thing at compiletime either
where i = fromInteger j
VCat x y -> VCat (comp x) (comp y)
_ -> val
|