sig
type (_, _) t = ('_, '_) Type_equal.t = T : ('a, 'a) t
type ('a, 'b) equal = ('a, 'b) t
val refl : ('a, 'a) t
val sym : ('a, 'b) t -> ('b, 'a) t
val trans : ('a, 'b) t -> ('b, 'c) t -> ('a, 'c) t
val conv : ('a, 'b) t -> 'a -> 'b
val detuple2 : ('a1 * 'a2, 'b1 * 'b2) t -> ('a1, 'b1) t * ('a2, 'b2) t
val tuple2 : ('a1, 'b1) t -> ('a2, 'b2) t -> ('a1 * 'a2, 'b1 * 'b2) t
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