functor (M : Monad.Basic) ->
  sig
    val traverse : ('a -> 'b M.t) -> 'a t -> 'b t M.t
    val traverse_ : ('a -> 'b M.t) -> 'a t -> unit M.t
    val sequence : 'a M.t t -> 'a t M.t
    val sequence_ : 'a M.t t -> unit M.t
    val foldr_m : ('a -> 'b -> 'b M.t) -> 'b -> 'a t -> 'b M.t
    val foldl_m : ('b -> 'a -> 'b M.t) -> 'b -> 'a t -> 'b M.t
  end