(*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *)

include module type of Monad_intf

module Make (M : sig
  type 'a t

  val return : 'a -> 'a t
  val bind : 'a t -> ('a -> 'b t) -> 'b t
end) : S with type 'a t = 'a M.t

module State (State : sig
  type t
end) : sig
  include S with type 'a t = State.t -> 'a * State.t

  val run : 'a t -> State.t -> 'a * State.t
end