@@ -9,6 +9,7 @@ data LVar = Loc Int | Glob Name
9data LExp = LV LVar
9data LExp = LV LVar
10 | LApp Bool Name [LExp] -- True = tail call
10 | LApp Bool Name [LExp] -- True = tail call
11 | LLazyApp Name [LExp] -- True = tail call
11 | LLazyApp Name [LExp] -- True = tail call
12 | LLet Name LExp LExp -- name just for pretty printing
13 | LLet Name LExp LExp -- name just for pretty printing
13 | LLam [Name] LExp -- lambda, lifted out before compiling
14 | LLam [Name] LExp -- lambda, lifted out before compiling
14 | LCon Int Name [LExp]
15 | LCon Int Name [LExp]
@@ -81,6 +82,11 @@ lift env (LApp tc n args) = do args' <- mapM (lift env) args
81 return (LApp tc n args')
82 return (LApp tc n args')
82lift env (LLazyApp n args) = do args' <- mapM (lift env) args
83lift env (LLazyApp n args) = do args' <- mapM (lift env) args
83 return (LLazyApp n args')
84 return (LLazyApp n args')
85+lift env (LLazyExp (LConst c)) = return (LConst c)
86+lift env (LLazyExp e) = do e' <- lift env e
88+ addFn fn (LFun fn env e')
89+ return (LLazyApp fn (map (LV . Glob) env))
84lift env (LLet n v e) = do v' <- lift env v
90lift env (LLet n v e) = do v' <- lift env v
85 e' <- lift (env ++ [n]) e
91 e' <- lift (env ++ [n]) e
86 return (LLet n v' e')
92 return (LLet n v' e')