sig
  module type Equatable =
    sig
      type 'a t
      val equal :
        'Reins.Types.Poly.Equatable.t ->
        'Reins.Types.Poly.Equatable.t -> bool
    end
  module type Comparable =
    sig
      type 'a t
      val compare :
        ('-> '-> int) ->
        'Reins.Types.Poly.Comparable.t ->
        'Reins.Types.Poly.Comparable.t -> int
      val to_string :
        ('-> string) -> 'Reins.Types.Poly.Comparable.t -> string
    end
  module type Hashable =
    sig type 'a t val equal : 'a t -> 'a t -> bool val hash : 'a t -> int end
  module type Arbitrary =
    sig
      type 'a t
      val gen :
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'Reins.Types.Poly.Arbitrary.t
      val to_string :
        ('-> string) -> 'Reins.Types.Poly.Arbitrary.t -> string
    end
  module type ArbitraryComparable =
    sig
      type 'a t
      val gen :
        (?size:int -> Random.State.t -> 'a) ->
        ?size:int -> Random.State.t -> 'a t
      val to_string : ('-> string) -> 'a t -> string
      val compare : ('-> '-> int) -> 'a t -> 'a t -> int
    end
  module ComposeComparable :
    functor (A : Comparable) (B : Comparable->
      sig
        type 'a t = 'B.t A.t
        val compare :
          ('-> '-> int) ->
          'Reins.Types.Poly.ComposeComparable.t ->
          'Reins.Types.Poly.ComposeComparable.t -> int
        val to_string :
          ('-> string) -> 'Reins.Types.Poly.ComposeComparable.t -> string
      end
  module ComposeGen :
    functor (A : Arbitrary) (B : Arbitrary->
      sig
        type 'a t = 'B.t A.t
        val gen :
          (?size:int -> Random.State.t -> 'a) ->
          ?size:int -> Random.State.t -> 'Reins.Types.Poly.ComposeGen.t
        val to_string :
          ('-> string) -> 'Reins.Types.Poly.ComposeGen.t -> string
      end
  module ComposeGenComparable :
    functor (A : ArbitraryComparable) (B : ArbitraryComparable->
      sig
        type 'a t = 'B.t A.t
        val gen :
          (?size:int -> Random.State.t -> 'a) ->
          ?size:int ->
          Random.State.t -> 'Reins.Types.Poly.ComposeGenComparable.t
        val to_string :
          ('-> string) ->
          'Reins.Types.Poly.ComposeGenComparable.t -> string
        val compare :
          ('-> '-> int) ->
          'Reins.Types.Poly.ComposeGenComparable.t ->
          'Reins.Types.Poly.ComposeGenComparable.t -> int
      end
  module Close :
    sig
      type 'a t = 'a
      val to_string : ('-> 'b) -> '-> 'b
      val compare : ('-> '-> 'c) -> '-> '-> 'c
    end
end