68 val could_unifys: typ list * typ list -> bool |
68 val could_unifys: typ list * typ list -> bool |
69 val eq_type: tyenv -> typ * typ -> bool |
69 val eq_type: tyenv -> typ * typ -> bool |
70 |
70 |
71 (*extend and merge type signatures*) |
71 (*extend and merge type signatures*) |
72 val add_class: Pretty.pp -> NameSpace.naming -> bstring * class list -> tsig -> tsig |
72 val add_class: Pretty.pp -> NameSpace.naming -> bstring * class list -> tsig -> tsig |
73 val hide_classes: bool -> string list -> tsig -> tsig |
73 val hide_class: bool -> string -> tsig -> tsig |
74 val set_defsort: sort -> tsig -> tsig |
74 val set_defsort: sort -> tsig -> tsig |
75 val add_types: NameSpace.naming -> (bstring * int) list -> tsig -> tsig |
75 val add_types: NameSpace.naming -> (bstring * int) list -> tsig -> tsig |
76 val add_abbrevs: NameSpace.naming -> (string * string list * typ) list -> tsig -> tsig |
76 val add_abbrevs: NameSpace.naming -> (string * string list * typ) list -> tsig -> tsig |
77 val add_nonterminals: NameSpace.naming -> string list -> tsig -> tsig |
77 val add_nonterminals: NameSpace.naming -> string list -> tsig -> tsig |
78 val hide_types: bool -> string list -> tsig -> tsig |
78 val hide_type: bool -> string -> tsig -> tsig |
79 val add_arity: Pretty.pp -> arity -> tsig -> tsig |
79 val add_arity: Pretty.pp -> arity -> tsig -> tsig |
80 val add_classrel: Pretty.pp -> class * class -> tsig -> tsig |
80 val add_classrel: Pretty.pp -> class * class -> tsig -> tsig |
81 val merge_tsigs: Pretty.pp -> tsig * tsig -> tsig |
81 val merge_tsigs: Pretty.pp -> tsig * tsig -> tsig |
82 end; |
82 end; |
83 |
83 |
503 handle TYPE (msg, _, _) => error msg; |
503 handle TYPE (msg, _, _) => error msg; |
504 val space' = space |> NameSpace.declare naming c'; |
504 val space' = space |> NameSpace.declare naming c'; |
505 val classes' = classes |> Sorts.add_class pp (c', cs'); |
505 val classes' = classes |> Sorts.add_class pp (c', cs'); |
506 in ((space', classes'), default, types) end); |
506 in ((space', classes'), default, types) end); |
507 |
507 |
508 fun hide_classes fully cs = map_tsig (fn ((space, classes), default, types) => |
508 fun hide_class fully c = map_tsig (fn ((space, classes), default, types) => |
509 ((fold (NameSpace.hide fully) cs space, classes), default, types)); |
509 ((NameSpace.hide fully c space, classes), default, types)); |
510 |
510 |
511 |
511 |
512 (* arities *) |
512 (* arities *) |
513 |
513 |
514 fun add_arity pp (t, Ss, S) tsig = tsig |> map_tsig (fn ((space, classes), default, types) => |
514 fun add_arity pp (t, Ss, S) tsig = tsig |> map_tsig (fn ((space, classes), default, types) => |
606 NameSpace.merge_tables (Library.eq_snd (op = : serial * serial -> bool)) (types1, types2) |
606 NameSpace.merge_tables (Library.eq_snd (op = : serial * serial -> bool)) (types1, types2) |
607 handle Symtab.DUP d => err_in_decls d (the_decl types1 d) (the_decl types2 d); |
607 handle Symtab.DUP d => err_in_decls d (the_decl types1 d) (the_decl types2 d); |
608 |
608 |
609 end; |
609 end; |
610 |
610 |
611 fun hide_types fully cs = map_tsig (fn (classes, default, (space, types)) => |
611 fun hide_type fully c = map_tsig (fn (classes, default, (space, types)) => |
612 (classes, default, (fold (NameSpace.hide fully) cs space, types))); |
612 (classes, default, (NameSpace.hide fully c space, types))); |
613 |
613 |
614 |
614 |
615 (* merge type signatures *) |
615 (* merge type signatures *) |
616 |
616 |
617 fun merge_tsigs pp (tsig1, tsig2) = |
617 fun merge_tsigs pp (tsig1, tsig2) = |