src/Pure/name.ML
changeset 28075 a45ce1bae4e0
parent 24849 193a10e6bf90
child 28108 1b08ed83b79e
equal deleted inserted replaced
28074:90adbbf03187 28075:a45ce1bae4e0
     1 (*  Title:      Pure/name.ML
     1 (*  Title:      Pure/name.ML
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author:     Makarius
     3     Author:     Makarius
     4 
     4 
     5 Names of basic logical entities (variables etc.).
     5 Names of basic logical entities (variables etc.).  Generic name bindings.
     6 *)
     6 *)
     7 
     7 
     8 signature NAME =
     8 signature NAME =
     9 sig
     9 sig
    10   val uu: string
    10   val uu: string
    26   val names: context -> string -> 'a list -> (string * 'a) list
    26   val names: context -> string -> 'a list -> (string * 'a) list
    27   val invent_list: string list -> string -> int -> string list
    27   val invent_list: string list -> string -> int -> string list
    28   val variants: string list -> context -> string list * context
    28   val variants: string list -> context -> string list * context
    29   val variant_list: string list -> string list -> string list
    29   val variant_list: string list -> string list -> string list
    30   val variant: string list -> string -> string
    30   val variant: string list -> string -> string
       
    31   type binding
       
    32   val binding_pos: string * Position.T -> binding
       
    33   val binding: string -> binding
       
    34   val no_binding: binding
       
    35   val name_of: binding -> string
       
    36   val pos_of: binding -> Position.T
       
    37   val map_name: (string -> string) -> binding -> binding
    31 end;
    38 end;
    32 
    39 
    33 structure Name: NAME =
    40 structure Name: NAME =
    34 struct
    41 struct
    35 
    42 
   137   in (x' ^ replicate_string n "_", ctxt') end);
   144   in (x' ^ replicate_string n "_", ctxt') end);
   138 
   145 
   139 fun variant_list used names = #1 (make_context used |> variants names);
   146 fun variant_list used names = #1 (make_context used |> variants names);
   140 fun variant used = singleton (variant_list used);
   147 fun variant used = singleton (variant_list used);
   141 
   148 
       
   149 
       
   150 
       
   151 (** generic name bindings **)
       
   152 
       
   153 datatype binding = Binding of string * Position.T;
       
   154 
       
   155 val binding_pos = Binding;
       
   156 fun binding name = binding_pos (name, Position.none);
       
   157 val no_binding = binding "";
       
   158 
       
   159 fun name_of (Binding (name, _)) = name;
       
   160 fun pos_of (Binding (_, pos)) = pos;
       
   161 
       
   162 fun map_name f (Binding (name, pos)) = Binding (f name, pos);
       
   163 
   142 end;
   164 end;