Module Base.Applicative

module Args_to_Args2 : functor (X : Args) -> Args2 with type ('a, 'e) arg = 'a X.arg with type ('f, 'r, 'e) t = ('f'r) X.t
module S2_to_S : functor (X : S2) -> S with type 'a t = ('a, unit) X.t
module S_to_S2 : functor (X : S) -> S2 with type ('a, 'e) t = 'a X.t
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_let_syntax : functor (X : Base__.Applicative_intf.For_let_syntax) -> functor (Intf : sig ... end) -> functor (Impl : Intf.S) -> Let_syntax with type 'a t := 'a X.t with module Open_on_rhs_intf := Intf
module Make_using_map2 : functor (X : Basic_using_map2) -> S with type 'a t := 'a X.t
module Make2_using_map2 : functor (X : Basic2_using_map2) -> 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
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