sig
type (_, _) t = ('_, '_) Type_equal.t = T : ('a, 'a) t
type ('a, 'b) equal = ('a, 'b) t
val refl : ('a, 'a) equal
val sym : ('a, 'b) equal -> ('b, 'a) equal
val trans : ('a, 'b) equal -> ('b, 'c) equal -> ('a, 'c) equal
val conv : ('a, 'b) equal -> 'a -> 'b
module Lift :
functor (X : T.T1) ->
sig val lift : ('a, 'b) equal -> ('a X.t, 'b X.t) equal end
module Lift2 :
functor (X : T.T2) ->
sig
val lift :
('a1, 'b1) equal ->
('a2, 'b2) equal -> (('a1, 'a2) X.t, ('b1, 'b2) X.t) equal
end
val detuple2 :
('a1 * 'a2, 'b1 * 'b2) equal -> ('a1, 'b1) equal * ('a2, 'b2) equal
val tuple2 :
('a1, 'b1) equal -> ('a2, 'b2) equal -> ('a1 * 'a2, 'b1 * 'b2) equal
module type Injective =
sig type 'a t val strip : ('a t, 'b t) equal -> ('a, 'b) equal end
module type Injective2 =
sig
type ('a1, 'a2) t
val strip :
(('a1, 'a2) t, ('b1, 'b2) t) equal ->
('a1, 'b1) equal * ('a2, 'b2) equal
end
module Composition_preserves_injectivity :
functor (M1 : Injective) ->
functor (M2 : Injective) ->
sig
type 'a t = 'a M1.t M2.t
val strip : ('a t, 'b t) equal -> ('a, 'b) equal
end
module Id :
sig
type 'a t = 'a Type_equal.Id.t
val create : name:string -> 'a t
val hash : 'a t -> int
val name : 'a t -> string
val same : 'a t -> 'b t -> bool
val same_witness : 'a t -> 'b t -> ('a, 'b) equal Or_error.t
val same_witness_exn : 'a t -> 'b t -> ('a, 'b) equal
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
end
end