equal
deleted
inserted
replaced
16 val dest: T -> |
16 val dest: T -> |
17 {restricts: ((string * typ list) * string) list, |
17 {restricts: ((string * typ list) * string) list, |
18 reducts: ((string * typ list) * (string * typ list) list) list} |
18 reducts: ((string * typ list) * (string * typ list) list) list} |
19 val empty: T |
19 val empty: T |
20 val merge: Pretty.pp -> T * T -> T |
20 val merge: Pretty.pp -> T * T -> T |
21 val define: Pretty.pp -> Consts.T -> |
21 val define: Pretty.pp -> bool -> bool -> string -> string -> |
22 bool -> bool -> string -> string -> string * typ -> (string * typ) list -> T -> T |
22 string * typ list -> (string * typ list) list -> T -> T |
23 end |
23 end |
24 |
24 |
25 structure Defs: DEFS = |
25 structure Defs: DEFS = |
26 struct |
26 struct |
27 |
27 |
189 in Defs (Symtab.join join_specs (defs1, defs2) |> Symtab.fold add_def defs2) end; |
189 in Defs (Symtab.join join_specs (defs1, defs2) |> Symtab.fold add_def defs2) end; |
190 |
190 |
191 |
191 |
192 (* define *) |
192 (* define *) |
193 |
193 |
194 fun define pp consts unchecked is_def module name lhs rhs (Defs defs) = |
194 fun define pp unchecked is_def module name (c, args) deps (Defs defs) = |
195 let |
195 let |
196 fun typargs const = (#1 const, Consts.typargs consts const); |
|
197 val (c, args) = typargs lhs; |
|
198 val deps = map typargs rhs; |
|
199 val restr = |
196 val restr = |
200 if plain_args args orelse |
197 if plain_args args orelse |
201 (case args of [Type (a, rec_args)] => plain_args rec_args | _ => false) |
198 (case args of [Type (a, rec_args)] => plain_args rec_args | _ => false) |
202 then [] else [(args, name)]; |
199 then [] else [(args, name)]; |
203 val spec = |
200 val spec = |