Module Tuple

module Tuple: Tuple

module T2: sig .. end
Signature for a 2-tuple module
module T3: sig .. end
Signature for a 3-tuple module

These functors allow users to write:
   module Foo = struct
     include Tuple.Make       (String) (Int)
     include Tuple.Comparable (String) (Int)
     include Tuple.Hashable   (String) (Int)
   end
  

module Make: 
functor (T1 : sig
type t 
end) ->
functor (T2 : sig
type t 
end) -> sig .. end
module type Comparable_sexpable = sig .. end
module Comparable: 
functor (S1 : Comparable_sexpable) ->
functor (S2 : Comparable_sexpable) -> Comparable_sexpable with type t := Make (S1) (S2).t
module type Hashable_sexpable = sig .. end
module Hashable: 
functor (S1 : Hashable_sexpable) ->
functor (S2 : Hashable_sexpable) -> Hashable_sexpable with type t := Make (S1) (S2).t
The difference between Hashable and Hashable_t functors is that the former's result type doesn't contain type t and the latter does.
module Hashable_t: 
functor (S1 : Hashable_sexpable) ->
functor (S2 : Hashable_sexpable) -> Hashable_sexpable with type t = Make (S1) (S2).t
module Sexpable: 
functor (S1 : Sexpable.S) ->
functor (S2 : Sexpable.S) -> Sexpable.S with type t := Make (S1) (S2).t