423 let |
423 let |
424 val names = map snd super_classes @ map fst classparams; |
424 val names = map snd super_classes @ map fst classparams; |
425 val params = Name.invent Name.context "d" (length names); |
425 val params = Name.invent Name.context "d" (length names); |
426 fun mk (k, name) = |
426 fun mk (k, name) = |
427 (name, ([(v, [])], |
427 (name, ([(v, [])], |
428 [([IConst (class, ((([], []), []), false)) `$$ map (IVar o SOME) params], |
428 [([IConst (class, ((([], []), ([], ITyVar "")), false)) `$$ map (IVar o SOME) params], |
429 IVar (SOME (nth params k)))])); |
429 IVar (SOME (nth params k)))])); |
430 in map_index mk names end |
430 in map_index mk names end |
431 | eqns_of_stmt (_, Code_Thingol.Classrel _) = |
431 | eqns_of_stmt (_, Code_Thingol.Classrel _) = |
432 [] |
432 [] |
433 | eqns_of_stmt (_, Code_Thingol.Classparam _) = |
433 | eqns_of_stmt (_, Code_Thingol.Classparam _) = |
434 [] |
434 [] |
435 | eqns_of_stmt (inst, Code_Thingol.Classinst ((class, (_, arity_args)), (super_instances, (classparam_instances, _)))) = |
435 | eqns_of_stmt (inst, Code_Thingol.Classinst ((class, (_, arity_args)), (super_instances, (classparam_instances, _)))) = |
436 [(inst, (arity_args, [([], IConst (class, ((([], []), []), false)) `$$ |
436 [(inst, (arity_args, [([], IConst (class, ((([], []), ([], ITyVar "")), false)) `$$ |
437 map (fn (_, (_, (inst, dss))) => IConst (inst, ((([], dss), []), false))) super_instances |
437 map (fn (_, (_, (inst, dss))) => IConst (inst, ((([], dss), ([], ITyVar "")), false))) super_instances |
438 @ map (IConst o snd o fst) classparam_instances)]))]; |
438 @ map (IConst o snd o fst) classparam_instances)]))]; |
439 |
439 |
440 |
440 |
441 (* compile whole programs *) |
441 (* compile whole programs *) |
442 |
442 |