sig
type 'a key
val create_key : string -> 'a key
val eq_type : 'a key -> 'b key -> ('a, 'b) eq option
val print : 'a key Pretty_utils.formatter
val compare : 'a key -> 'b key -> int
val equal : 'a key -> 'b key -> bool
val hash : 'a key -> int
val tag : 'a key -> int
type 'a data
type 'a structure =
Unit : unit Structure.Shape.structure
| Void : 'a Structure.Shape.structure
| Leaf : 'a key * 'a Structure.Shape.data -> 'a Structure.Shape.structure
| Node : 'a Structure.Shape.structure *
'b Structure.Shape.structure -> ('a * 'b) Structure.Shape.structure
| Option : 'a Structure.Shape.structure *
'a -> 'a option Structure.Shape.structure
val eq_structure :
'a Structure.Shape.structure ->
'b Structure.Shape.structure -> ('a, 'b) Structure.eq option
end