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->
      functor (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->
      functor (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->
      functor (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->
      functor (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->
      functor (M2 : Comparable->
        functor (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->
      functor (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->
      functor (B : Arbitrary->
        functor (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