10
check :: Cont -> Val -> Exp -> G ()
11
checkT :: Cont -> Exp -> G ()
13
checkT con ESet = return ()
14
checkT con (EFun x a b) =
17
v <- return (evalCon con a)
19
checkT (upCon x u v con) b
20
checkT con e = check con Set e
23
check con (Fun v f) (ELam x e) =
26
check (upCon x u v con) (f u) e
27
check con v (EIdent n) =
29
v' <- return (snd (getVT n con))
31
check con v (EApp n es) =
33
v' <- checkI con (snd (getVT n con)) es
35
check con v (Efun nes) =
36
mapM_ (checkP con v) nes
37
check _ _ e = fail ("check " ++ show e)
39
checkP con (Fun (App h ps) f) (Bcon i e) =
41
(v,w) <- return (getVT i con)
42
check con (itCurry (apps v ps) (inst w ps) f) e
43
checkP _ _ _ = fail "checkP"
46
checkI con (Fun a f) (e:es) =
49
checkI con (f (evalCon con e)) es
50
checkI _ v [] = return v
51
checkI _ _ _ = fail "checkI"