src/Pure/sign.ML
changeset 2963 f3b5af1c5a67
parent 2693 8300bba275e3
child 2979 db6941221197
equal deleted inserted replaced
2962:97ae96c72d8c 2963:f3b5af1c5a67
   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 =