sig
  module type S =
    sig
      type 'a t
      val bind : 'a t -> ('a -> 'b t) -> 'b t
      val return : 'a -> 'a t
      val failwith : string -> 'a t
    end
end