This module serves mostly as a partial check that S2 and S are in sync, but actually calling it is occasionally useful.
S2
S
X : S
type ('a, 'e) t
= 'a X.t
val return : 'a ‑> ('a, _) t
val apply : ('a ‑> 'b, 'e) t ‑> ('a, 'e) t ‑> ('b, 'e) t
val map : ('a, 'e) t ‑> f:('a ‑> 'b) ‑> ('b, 'e) t
val map2 : ('a, 'e) t ‑> ('b, 'e) t ‑> f:('a ‑> 'b ‑> 'c) ‑> ('c, 'e) t
val map3 : ('a, 'e) t ‑> ('b, 'e) t ‑> ('c, 'e) t ‑> f:('a ‑> 'b ‑> 'c ‑> 'd) ‑> ('d, 'e) t
val all : ('a, 'e) t list ‑> ('a list, 'e) t
val all_ignore : (unit, 'e) t list ‑> (unit, 'e) t
val both : ('a, 'e) t ‑> ('b, 'e) t ‑> ('a * 'b, 'e) t
module Applicative_infix : sig ... end
include module type of Applicative_infix
val (<*>) : ('a ‑> 'b, 'e) t ‑> ('a, 'e) t ‑> ('b, 'e) t
val (<*) : ('a, 'e) t ‑> (unit, 'e) t ‑> ('a, 'e) t
val (*>) : (unit, 'e) t ‑> ('a, 'e) t ‑> ('a, 'e) t