# Module type Applicative_intf.S

    module type S = sig .. end

    type 'a t

    val return : 'a -> 'a t

    val apply : ('a -> 'b) t ->
           'a t -> 'b t

    val map : 'a t -> f:('a -> 'b) -> 'b t

    val map2 : 'a t ->
           'b t -> f:('a -> 'b -> 'c) -> 'c t

    val map3 : 'a t ->
           'b t ->
           'c t ->
           f:('a -> 'b -> 'c -> 'd) -> 'd t

    val all : 'a t list -> 'a list t

    val both : 'a t ->
           'b t -> ('a * 'b) t

    module Applicative_infix: sig .. end

    include Applicative_intf.S.Applicative_infix