159 |
159 |
160 fun print_sg sg = |
160 fun print_sg sg = |
161 let |
161 let |
162 fun prt_typ syn ty = Pretty.quote (Syntax.pretty_typ syn ty); |
162 fun prt_typ syn ty = Pretty.quote (Syntax.pretty_typ syn ty); |
163 |
163 |
164 fun pretty_subclass (cl, cls) = Pretty.block |
164 fun pretty_classrel (cl, cls) = Pretty.block |
165 (Pretty.str (cl ^ " <") :: Pretty.brk 1 :: |
165 (Pretty.str (cl ^ " <") :: Pretty.brk 1 :: |
166 Pretty.commas (map Pretty.str cls)); |
166 Pretty.commas (map Pretty.str cls)); |
167 |
167 |
168 fun pretty_default cls = Pretty.block |
168 fun pretty_default cls = Pretty.block |
169 [Pretty.str "default:", Pretty.brk 1, pretty_sort cls]; |
169 [Pretty.str "default:", Pretty.brk 1, pretty_sort cls]; |
186 fun pretty_const syn (c, ty) = Pretty.block |
186 fun pretty_const syn (c, ty) = Pretty.block |
187 [Pretty.str (quote c ^ " ::"), Pretty.brk 1, prt_typ syn ty]; |
187 [Pretty.str (quote c ^ " ::"), Pretty.brk 1, prt_typ syn ty]; |
188 |
188 |
189 |
189 |
190 val Sg {tsig, const_tab, syn, stamps} = sg; |
190 val Sg {tsig, const_tab, syn, stamps} = sg; |
191 val {classes, subclass, default, tycons, abbrs, arities} = |
191 val {classes, classrel, default, tycons, abbrs, arities} = |
192 Type.rep_tsig tsig; |
192 Type.rep_tsig tsig; |
193 in |
193 in |
194 Pretty.writeln (Pretty.strs ("stamps:" :: stamp_names stamps)); |
194 Pretty.writeln (Pretty.strs ("stamps:" :: stamp_names stamps)); |
195 Pretty.writeln (Pretty.strs ("classes:" :: classes)); |
195 Pretty.writeln (Pretty.strs ("classes:" :: classes)); |
196 Pretty.writeln (Pretty.big_list "subclass:" |
196 Pretty.writeln (Pretty.big_list "classrel:" |
197 (map pretty_subclass subclass)); |
197 (map pretty_classrel classrel)); |
198 Pretty.writeln (pretty_default default); |
198 Pretty.writeln (pretty_default default); |
199 Pretty.writeln (Pretty.big_list "types:" (map pretty_ty tycons)); |
199 Pretty.writeln (Pretty.big_list "types:" (map pretty_ty tycons)); |
200 Pretty.writeln (Pretty.big_list "abbrs:" (map (pretty_abbr syn) abbrs)); |
200 Pretty.writeln (Pretty.big_list "abbrs:" (map (pretty_abbr syn) abbrs)); |
201 Pretty.writeln (Pretty.big_list "arities:" |
201 Pretty.writeln (Pretty.big_list "arities:" |
202 (List.concat (map pretty_arities arities))); |
202 (List.concat (map pretty_arities arities))); |
314 [] => (norm_tm, type_of norm_tm, maxidx_of_term norm_tm) |
314 [] => (norm_tm, type_of norm_tm, maxidx_of_term norm_tm) |
315 | errs => raise_type (cat_lines errs) [] [norm_tm]) |
315 | errs => raise_type (cat_lines errs) [] [norm_tm]) |
316 end; |
316 end; |
317 |
317 |
318 |
318 |
319 (*Package error messages from type checking*) |
319 (*package error messages from type checking*) |
320 fun exn_type_msg sg (msg, Ts, ts) = |
320 fun exn_type_msg sg (msg, Ts, ts) = |
321 let val show_typ = string_of_typ sg |
321 let |
322 val show_term = string_of_term sg |
322 val show_typ = string_of_typ sg; |
323 fun term_err [] = "" |
323 val show_term = set_ap Syntax.show_brackets true (string_of_term sg); |
324 | term_err [t] = "\nInvolving this term:\n" ^ show_term t |
324 |
325 | term_err ts = |
325 fun term_err [] = "" |
326 "\nInvolving these terms:\n" ^ cat_lines (map show_term ts); |
326 | term_err [t] = "\n\nInvolving this term:\n" ^ show_term t |
327 in "\nType checking error: " ^ msg ^ "\n" ^ |
327 | term_err ts = |
328 cat_lines (map show_typ Ts) ^ term_err ts ^ "\n" |
328 "\n\nInvolving these terms:\n" ^ cat_lines (map show_term ts); |
329 end; |
329 in |
|
330 "\nType checking error: " ^ msg ^ "\n" ^ |
|
331 cat_lines (map show_typ Ts) ^ term_err ts ^ "\n" |
|
332 end; |
330 |
333 |
331 |
334 |
332 |
335 |
333 (** infer_types **) (*exception ERROR*) |
336 (** infer_types **) (*exception ERROR*) |
334 |
337 |
504 (Syntax.extend_consts syn names, Type.ext_tsig_classes tsig classes, ctab) |
507 (Syntax.extend_consts syn names, Type.ext_tsig_classes tsig classes, ctab) |
505 consts |
508 consts |
506 end; |
509 end; |
507 |
510 |
508 |
511 |
509 (* add to subclass relation *) |
512 (* add to classrel *) |
510 |
513 |
511 fun ext_classrel (syn, tsig, ctab) pairs = |
514 fun ext_classrel (syn, tsig, ctab) pairs = |
512 (syn, Type.ext_tsig_subclass tsig pairs, ctab); |
515 (syn, Type.ext_tsig_classrel tsig pairs, ctab); |
513 |
516 |
514 |
517 |
515 (* add to syntax *) |
518 (* add to syntax *) |
516 |
519 |
517 fun ext_syn extfun (syn, tsig, ctab) args = |
520 fun ext_syn extfun (syn, tsig, ctab) args = |