@@ -47,6 +47,13 @@ addApps defs (n, LFun _ args e) = (n, LFun n args (aa args e))
47 [LFun _ as _] -> let arity = length as in
47 [LFun _ as _] -> let arity = length as in
48 fixApply tc n args' arity
48 fixApply tc n args' arity
49 [] -> chainAPPLY (LV (Glob n)) args'
49 [] -> 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'
50 aa env (LLet n v sc) = LLet n (aa env v) (aa (n : env) sc)
57 aa env (LLet n v sc) = LLet n (aa env v) (aa (n : env) sc)
51 aa env (LCon i n args) = LCon i n (map (aa env) args)
58 aa env (LCon i n args) = LCon i n (map (aa env) args)
52 aa env (LCase e alts) = LCase (eEVAL (aa env e)) (map (aaAlt env) alts)
59 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))
66 | length args == ar = LApp tc n args
73 | length args == ar = LApp tc n args
67 | length args < ar = LApp tc (mkUnderCon n (ar - length args)) args
74 | length args < ar = LApp tc (mkUnderCon n (ar - length args)) args
68 | length args > ar = chainAPPLY (LApp tc n (take ar args)) (drop ar args)
75 | length args > ar = chainAPPLY (LApp tc n (take ar args)) (drop ar args)
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)
70 chainAPPLY f [] = f
82 chainAPPLY f [] = f
71 chainAPPLY f (a : as) = chainAPPLY (LApp False (MN 0 "APPLY") [f, a]) as
83 chainAPPLY f (a : as) = chainAPPLY (LApp False (MN 0 "APPLY") [f, a]) as