@@ -47,6 +47,13 @@ addApps defs (n, LFun _ args e) = (n, LFun n args (aa args e))
4747 [LFun _ as _] -> let arity = length as in
4848 fixApply tc n args' arity
4949 [] -> chainAPPLY (LV (Glob n)) args'
50+ aa env (LLazyApp n args)
51+ = let args' = map (aa env) args in
52+ case lookupCtxt Nothing n defs of
53+ [LConstructor _ i ar] -> LApp False n args'
54+ [LFun _ as _] -> let arity = length as in
55+ fixLazyApply n args' arity
56+ [] -> chainAPPLY (LV (Glob n)) args'
5057 aa env (LLet n v sc) = LLet n (aa env v) (aa (n : env) sc)
5158 aa env (LCon i n args) = LCon i n (map (aa env) args)
5259 aa env (LCase e alts) = LCase (eEVAL (aa env e)) (map (aaAlt env) alts)
@@ -66,6 +73,11 @@ addApps defs (n, LFun _ args e) = (n, LFun n args (aa args e))
6673 | length args == ar = LApp tc n args
6774 | length args < ar = LApp tc (mkUnderCon n (ar - length args)) args
6875 | length args > ar = chainAPPLY (LApp tc n (take ar args)) (drop ar args)
76+
77+ fixLazyApply n args ar
78+ | length args == ar = LApp False (mkFnCon n) args
79+ | length args < ar = LApp False (mkUnderCon n (ar - length args)) args
80+ | length args > ar = chainAPPLY (LApp False n (take ar args)) (drop ar args)
6981
7082 chainAPPLY f [] = f
7183 chainAPPLY f (a : as) = chainAPPLY (LApp False (MN 0 "APPLY") [f, a]) as