Modular interface.

module type TypeS = sig ... end

Just a type `t`. Used for

module Monoid : sig ... end

Monoid.S is a signature for a monoid (a type `t` with `zero` and `+`), and 'a Monoid.t is the type for monoids represented as first-class modules.

module Functor : sig ... end

Functor.S is a signature for a functor (a type 'a `t` with `map`).

module Applicative : sig ... end

Applicative.S is a signature for an applicative functor (a type 'a `t` with `map`, `pure` and `apply`). This module contains many instances of applicative functors.

type ('a, 'b) length =
  1. | Zero : (unit, unit) length
  2. | Succ : ('a, 'b) length -> (_ * 'a, _ * 'b) length
module type SequenceOfUnaryTypeS = sig ... end
module Sequence : SequenceOfUnaryTypeS with type 'a x = 'a
module type SequenceOfBinaryTypeS = sig ... end
module Arity : sig ... end
exception StructuralMismatch