sig
  type 'a t = 'a * [ `New | `Same ]
  val return_same : '-> 'SimplM.t
  val return_new : '-> 'SimplM.t
  val return : '-> 'SimplM.t
  val return_opt : old:'-> 'a option -> 'SimplM.t
  val get : 'SimplM.t -> 'a
  val is_new : 'SimplM.t -> bool
  val is_same : 'SimplM.t -> bool
  val ( >>= ) : 'SimplM.t -> ('-> 'SimplM.t) -> 'SimplM.t
  val map : ('-> 'b) -> 'SimplM.t -> 'SimplM.t
  val app_list : ('-> 'SimplM.t) list -> '-> 'SimplM.t
  val map_l : ('-> 'SimplM.t) -> 'a list -> 'b list SimplM.t
  val fold_l : ('-> '-> 'SimplM.t) -> '-> 'b list -> 'SimplM.t
  module Infix :
    sig
      val ( >>= ) : 'SimplM.t -> ('-> 'SimplM.t) -> 'SimplM.t
      val ( >|= ) : 'SimplM.t -> ('-> 'b) -> 'SimplM.t
    end
end