src/Pure/defs.ML
changeset 19727 f5895f998402
parent 19713 69c71d40f8a8
child 19729 cb9e2f0c7658
equal deleted inserted replaced
19726:df95778b4c2f 19727:f5895f998402
    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 =