203 val print_method = str o Library.enclose "`" "`" o deresolve_full; |
203 val print_method = str o Library.enclose "`" "`" o deresolve_full; |
204 fun print_stmt (name, Code_Thingol.Fun (_, (((vs, ty), raw_eqs), _))) = |
204 fun print_stmt (name, Code_Thingol.Fun (_, (((vs, ty), raw_eqs), _))) = |
205 print_def name (vs, ty) (filter (snd o snd) raw_eqs) |
205 print_def name (vs, ty) (filter (snd o snd) raw_eqs) |
206 | print_stmt (name, Code_Thingol.Datatype (_, (vs, cos))) = |
206 | print_stmt (name, Code_Thingol.Datatype (_, (vs, cos))) = |
207 let |
207 let |
208 val tyvars = intro_tyvars vs reserved; |
208 val tyvars = intro_tyvars (map (rpair []) vs) reserved; |
209 fun print_co ((co, _), []) = |
209 fun print_co ((co, _), []) = |
210 concat [str "final", str "case", str "object", (str o deresolve) co, |
210 concat [str "final", str "case", str "object", (str o deresolve) co, |
211 str "extends", applify "[" "]" I NOBR ((str o deresolve) name) |
211 str "extends", applify "[" "]" I NOBR ((str o deresolve) name) |
212 (replicate (length vs) (str "Nothing"))] |
212 (replicate (length vs) (str "Nothing"))] |
213 | print_co ((co, vs_args), tys) = |
213 | print_co ((co, vs_args), tys) = |
215 (fn (v, arg) => constraint (str v) (print_typ tyvars NOBR arg)) NOBR |
215 (fn (v, arg) => constraint (str v) (print_typ tyvars NOBR arg)) NOBR |
216 (applify "[" "]" (str o lookup_tyvar tyvars) NOBR ((concat o map str) |
216 (applify "[" "]" (str o lookup_tyvar tyvars) NOBR ((concat o map str) |
217 ["final", "case", "class", deresolve co]) vs_args) |
217 ["final", "case", "class", deresolve co]) vs_args) |
218 (Name.invent_names (snd reserved) "a" tys), |
218 (Name.invent_names (snd reserved) "a" tys), |
219 str "extends", |
219 str "extends", |
220 applify "[" "]" (str o lookup_tyvar tyvars o fst) NOBR |
220 applify "[" "]" (str o lookup_tyvar tyvars) NOBR |
221 ((str o deresolve) name) vs |
221 ((str o deresolve) name) vs |
222 ]; |
222 ]; |
223 in |
223 in |
224 Pretty.chunks (applify "[" "]" (str o prefix "+" o lookup_tyvar tyvars o fst) |
224 Pretty.chunks (applify "[" "]" (str o prefix "+" o lookup_tyvar tyvars) |
225 NOBR ((concat o map str) ["abstract", "sealed", "class", deresolve name]) vs |
225 NOBR ((concat o map str) ["abstract", "sealed", "class", deresolve name]) vs |
226 :: map print_co cos) |
226 :: map print_co cos) |
227 end |
227 end |
228 | print_stmt (name, Code_Thingol.Class (_, (v, (super_classes, classparams)))) = |
228 | print_stmt (name, Code_Thingol.Class (_, (v, (super_classes, classparams)))) = |
229 let |
229 let |