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