# Module type Applicative_intf.S2

    module type S2 = sig .. end

    type ('a, 'e) t

    val return : 'a -> ('a, 'b) 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 both : ('a, 'e) t ->
           ('b, 'e) t -> ('a * 'b, 'e) t

    module Applicative_infix: sig .. end

    include Applicative_intf.S2.Applicative_infix