Base.Applicativemodule type Applicative_infix = sig ... endmodule type Applicative_infix2 = sig ... endmodule type Applicative_infix3 = sig ... endmodule type Basic = sig ... endmodule type Basic2 = sig ... endmodule type Basic3 = sig ... endmodule type Basic_using_map2 = sig ... endmodule type Basic2_using_map2 = sig ... endmodule type Basic3_using_map2 = sig ... endmodule type Let_syntax = sig ... endmodule type Let_syntax2 = sig ... endmodule type Let_syntax3 = sig ... endmodule type S = sig ... endmodule type S2 = sig ... endmodule type S3 = sig ... endmodule Make_let_syntax (X : sig ... end) (Intf : sig ... end) (Impl : Intf.S) : Let_syntax with type 'a t := 'a X.t with module Open_on_rhs_intf
:= Intfmodule Make_let_syntax2 (X : sig ... end) (Intf : sig ... end) (Impl : Intf.S) : Let_syntax2 with type ('a, 'e) t
:= ('a, 'e) X.t with module Open_on_rhs_intf := Intfmodule Make_let_syntax3 (X : sig ... end) (Intf : sig ... end) (Impl : Intf.S) : Let_syntax3 with type ('a, 'd, 'e) t
:= ('a, 'd, 'e) X.t with module Open_on_rhs_intf := Intfmodule Make_using_map2 (X : Basic_using_map2) : S with type 'a t := 'a X.tmodule Make2_using_map2 (X : Basic2_using_map2) : S2 with type ('a, 'e) t := ('a, 'e) X.tmodule Make3_using_map2 (X : Basic3_using_map2) : S3 with type ('a, 'd, 'e) t := ('a, 'd, 'e) X.tThe 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.