sig
  type 'a t
  val return : 'a -> 'a Applicative_intf.S.t
  val apply :
    ('a -> 'b) Applicative_intf.S.t ->
    'a Applicative_intf.S.t -> 'b Applicative_intf.S.t
  val map :
    'a Applicative_intf.S.t -> f:('a -> 'b) -> 'b Applicative_intf.S.t
  val map2 :
    'a Applicative_intf.S.t ->
    'b Applicative_intf.S.t -> f:('a -> 'b -> 'c) -> 'c Applicative_intf.S.t
  val map3 :
    'a Applicative_intf.S.t ->
    'b Applicative_intf.S.t ->
    'c Applicative_intf.S.t ->
    f:('a -> 'b -> 'c -> 'd) -> 'd Applicative_intf.S.t
  val all : 'a Applicative_intf.S.t list -> 'a list Applicative_intf.S.t
  val both :
    'a Applicative_intf.S.t ->
    'b Applicative_intf.S.t -> ('a * 'b) Applicative_intf.S.t
  module Applicative_infix :
    sig
      val ( <*> ) :
        ('a -> 'b) Applicative_intf.S.t ->
        'a Applicative_intf.S.t -> 'b Applicative_intf.S.t
      val ( <* ) :
        'a Applicative_intf.S.t ->
        unit Applicative_intf.S.t -> 'a Applicative_intf.S.t
      val ( *> ) :
        unit Applicative_intf.S.t ->
        'a Applicative_intf.S.t -> 'a Applicative_intf.S.t
    end
  val ( <*> ) : ('a -> 'b) t -> 'a t -> 'b t
  val ( <* ) : 'a t -> unit t -> 'a t
  val ( *> ) : unit t -> 'a t -> 'a t
end