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