@@ -135,7 +135,8 @@ module KNorm = struct
135135 | (u , f ) :: t -> destruct_uandf t (u::ru) (fun x -> rf (f x))
136136 | [] -> ru, rf
137137 in let us, f = destruct_uandf (List. rev uandf) [] (fun x -> x) in
138- f (Cls. AppTy (x, List. length @@ Environment. find x args, List. length tvs, us))
138+ let (zs, outer_tvs_len) = Environment. find x args in
139+ f (Cls. AppTy (x, List. length zs, outer_tvs_len, us))
139140 | CastExp (x , u1 , u2 , (r , p )) ->
140141 let u1, udeclfun1 = ty_tv tvs u1 in
141142 let u2, udeclfun2 = ty_tv tvs u2 in
@@ -180,7 +181,7 @@ module KNorm = struct
180181 (* let zts = List.map (fun z -> (z, Environment.find z tyenv')) zs in *)
181182 let fundef = Cls. FundefD { name = Cls. to_label x; tvs = (new_tvs, List. length tvs'); arg = (y, z); formal_fv = zs; body = f1' } in
182183 if not @@ List. mem fundef ! toplevel then toplevel := fundef :: ! toplevel;
183- let f2' = toCls_exp known' tvs (Environment. add x zs args) f2 in
184+ let f2' = toCls_exp known' tvs (Environment. add x (zs, List. length tvs) args) f2 in
184185 if V. mem x (Cls. fv_exp f2') then
185186 Cls. MakeCls (x, { Cls. entry = Cls. to_label x; Cls. actual_fv = zs }, { ftvs = tyvar_to_tyarg tvs; offset = List. length tvs' }, f2')
186187 else f2'
@@ -211,7 +212,7 @@ module KNorm = struct
211212 (* let zts = List.map (fun z -> (z, Environment.find z tyenv')) zs in *)
212213 let fundef = Cls. FundefM { name = Cls. to_label x; tvs = (new_tvs, List. length tvs'); arg = y; formal_fv = zs; body = f1' } in
213214 if not @@ List. mem fundef ! toplevel then toplevel := fundef :: ! toplevel;
214- let f2' = toCls_exp known' tvs (Environment. add x zs args) f2 in
215+ let f2' = toCls_exp known' tvs (Environment. add x (zs, List. length tvs) args) f2 in
215216 if V. mem x (Cls. fv_exp f2') then
216217 Cls. MakeCls (x, { Cls. entry = Cls. to_label x; Cls. actual_fv = zs }, { ftvs = tyvar_to_tyarg tvs; offset = List. length tvs' }, f2')
217218 else f2'
0 commit comments