sig
  type ('a, 'e) t
  val return : '-> ('a, 'b) Applicative_intf.S2.t
  val apply :
    ('-> 'b, 'e) Applicative_intf.S2.t ->
    ('a, 'e) Applicative_intf.S2.t -> ('b, 'e) Applicative_intf.S2.t
  val map :
    ('a, 'e) Applicative_intf.S2.t ->
    f:('-> 'b) -> ('b, 'e) Applicative_intf.S2.t
  val map2 :
    ('a, 'e) Applicative_intf.S2.t ->
    ('b, 'e) Applicative_intf.S2.t ->
    f:('-> '-> 'c) -> ('c, 'e) Applicative_intf.S2.t
  val map3 :
    ('a, 'e) Applicative_intf.S2.t ->
    ('b, 'e) Applicative_intf.S2.t ->
    ('c, 'e) Applicative_intf.S2.t ->
    f:('-> '-> '-> 'd) -> ('d, 'e) Applicative_intf.S2.t
  val all :
    ('a, 'e) Applicative_intf.S2.t list ->
    ('a list, 'e) Applicative_intf.S2.t
  val both :
    ('a, 'e) Applicative_intf.S2.t ->
    ('b, 'e) Applicative_intf.S2.t -> ('a * 'b, 'e) Applicative_intf.S2.t
  module Applicative_infix :
    sig
      val ( <*> ) :
        ('-> 'b, 'e) Applicative_intf.S2.t ->
        ('a, 'e) Applicative_intf.S2.t -> ('b, 'e) Applicative_intf.S2.t
      val ( <* ) :
        ('a, 'e) Applicative_intf.S2.t ->
        (unit, 'e) Applicative_intf.S2.t -> ('a, 'e) Applicative_intf.S2.t
      val ( *> ) :
        (unit, 'e) Applicative_intf.S2.t ->
        ('a, 'e) Applicative_intf.S2.t -> ('a, 'e) Applicative_intf.S2.t
    end
  val ( <*> ) : ('-> '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
end