# Module Applicative

    module Applicative: sig .. end

The following functors give a sense of what Applicatives one can define.

Of these, `Of_monad` is likely the most useful. The others are mostly didactic.

    include Applicative_intf

    module Make: functor (X : Basic) -> S   with type  'a      t :=  'a      X.t

    module Make2: functor (X : Basic2) -> S2  with type ('a, 'e) t := ('a, 'e) X.t

    module Make_args: functor (X : S) -> Args   with type  'a      arg :=  'a      X.t

    module Make_args2: functor (X : S2) -> Args2  with type ('a, 'e) arg := ('a, 'e) X.t

The following functors give a sense of what Applicatives one can define.

Of these, `Of_monad` is likely the most useful. The others are mostly didactic.

    module Of_monad: functor (M : Monad.S) -> S  with type 'a t := 'a M.t

Every monad is Applicative via:

    module Compose: functor (F : S) -> functor (G : S) -> S  with type 'a t =  'a F.t G.t

    module Pair: functor (F : S) -> functor (G : S) -> S  with type 'a t =  'a F.t * 'a G.t

    module Const: functor (Monoid : sig
    type t

    val zero : t
    val plus : t -> t -> t
    Laws: plus is associative and zero is both a left and right unit for plus

    end) -> S  with type 'a t = Monoid.t

Every monoid gives rise to a constant Applicative.