30 val variant: string list -> string -> string |
30 val variant: string list -> string -> string |
31 type binding |
31 type binding |
32 val binding_pos: string * Position.T -> binding |
32 val binding_pos: string * Position.T -> binding |
33 val binding: string -> binding |
33 val binding: string -> binding |
34 val no_binding: binding |
34 val no_binding: binding |
|
35 val prefix_of: binding -> (string * bool) list |
35 val name_of: binding -> string |
36 val name_of: binding -> string |
36 val pos_of: binding -> Position.T |
37 val pos_of: binding -> Position.T |
|
38 val add_prefix: bool -> string -> binding -> binding |
37 val map_name: (string -> string) -> binding -> binding |
39 val map_name: (string -> string) -> binding -> binding |
38 val qualified: string -> binding -> binding |
40 val qualified: string -> binding -> binding |
39 end; |
41 end; |
40 |
42 |
41 structure Name: NAME = |
43 structure Name: NAME = |
149 |
151 |
150 |
152 |
151 |
153 |
152 (** generic name bindings **) |
154 (** generic name bindings **) |
153 |
155 |
154 datatype binding = Binding of string * Position.T; |
156 datatype binding = Binding of ((string * bool) list * string) * Position.T; |
155 |
157 |
156 val binding_pos = Binding; |
158 fun prefix_of (Binding ((prefix, _), _)) = prefix; |
|
159 fun name_of (Binding ((_, name), _)) = name; |
|
160 fun pos_of (Binding (_, pos)) = pos; |
|
161 |
|
162 fun binding_pos (name, pos) = Binding (([], name), pos); |
157 fun binding name = binding_pos (name, Position.none); |
163 fun binding name = binding_pos (name, Position.none); |
158 val no_binding = binding ""; |
164 val no_binding = binding ""; |
159 |
165 |
160 fun name_of (Binding (name, _)) = name; |
166 fun map_binding f (Binding bnd) = Binding (f bnd); |
161 fun pos_of (Binding (_, pos)) = pos; |
|
162 |
167 |
163 fun map_name f (Binding (name, pos)) = Binding (f name, pos); |
168 fun add_prefix sticky prfx = (map_binding o apfst o apfst) |
|
169 (cons (prfx, sticky)); |
|
170 |
|
171 val map_name = map_binding o apfst o apsnd; |
164 val qualified = map_name o NameSpace.qualified; |
172 val qualified = map_name o NameSpace.qualified; |
165 |
173 |
166 end; |
174 end; |