sig
  module type Equatable =
    sig
      type t
      val equal :
        Reins.Types.Mono.Equatable.t -> Reins.Types.Mono.Equatable.t -> bool
    end
  module type Comparable =
    sig
      type t
      val compare :
        Reins.Types.Mono.Comparable.t -> Reins.Types.Mono.Comparable.t -> int
      val to_string : Reins.Types.Mono.Comparable.t -> string
    end
  module type Hashable =
    sig type t val equal : t -> t -> bool val hash : t -> int end
  module type Arbitrary =
    sig
      type t
      val gen : ?size:int -> Random.State.t -> Reins.Types.Mono.Arbitrary.t
      val to_string : Reins.Types.Mono.Arbitrary.t -> string
    end
  module type ArbitraryComparable =
    sig
      type t
      val gen : ?size:int -> Random.State.t -> t
      val to_string : t -> string
      val compare : t -> t -> int
    end
  module ComposeComparable :
    functor (P : Poly.Comparable) (M : Comparable->
      sig
        type t = M.t P.t
        val compare :
          Reins.Types.Mono.ComposeComparable.t ->
          Reins.Types.Mono.ComposeComparable.t -> int
        val to_string : Reins.Types.Mono.ComposeComparable.t -> string
      end
  module ComposeGen :
    functor (P : Poly.Arbitrary) (M : Arbitrary->
      sig
        type t = M.t P.t
        val gen :
          ?size:int -> Random.State.t -> Reins.Types.Mono.ComposeGen.t
        val to_string : Reins.Types.Mono.ComposeGen.t -> string
      end
  module ComposeGenComparable :
    functor (P : Poly.ArbitraryComparable) (M : ArbitraryComparable->
      sig
        type t = M.t P.t
        val gen :
          ?size:int ->
          Random.State.t -> Reins.Types.Mono.ComposeGenComparable.t
        val to_string : Reins.Types.Mono.ComposeGenComparable.t -> string
        val compare :
          Reins.Types.Mono.ComposeGenComparable.t ->
          Reins.Types.Mono.ComposeGenComparable.t -> int
      end
  module ComparablePair :
    functor (M1 : Comparable) (M2 : Comparable->
      sig
        type t = M1.t * M2.t
        val compare :
          Reins.Types.Mono.ComparablePair.t ->
          Reins.Types.Mono.ComparablePair.t -> int
        val to_string : Reins.Types.Mono.ComparablePair.t -> string
      end
  module Comparable3Tuple :
    functor (M1 : Comparable) (M2 : Comparable) (M3 : Comparable->
      sig
        type t = M1.t * M2.t * M3.t
        val compare :
          Reins.Types.Mono.Comparable3Tuple.t ->
          Reins.Types.Mono.Comparable3Tuple.t -> int
        val to_string : Reins.Types.Mono.Comparable3Tuple.t -> string
      end
  module GenPair :
    functor (A : Arbitrary) (B : Arbitrary->
      sig
        type t = A.t * B.t
        val gen : ?size:int -> Random.State.t -> Reins.Types.Mono.GenPair.t
        val to_string : Reins.Types.Mono.GenPair.t -> string
      end
  module Gen3Tuple :
    functor (A : Arbitrary) (B : Arbitrary) (C : Arbitrary->
      sig
        type t = A.t * B.t * C.t
        val gen : ?size:int -> Random.State.t -> Reins.Types.Mono.Gen3Tuple.t
        val to_string : Reins.Types.Mono.Gen3Tuple.t -> string
      end
end