sig
  type _ t
  val map : ('-> 'b) -> 'a t -> 'b t
  val ( >|= ) : 'a t -> ('-> 'b) -> 'b t
  val replace : '-> 'b t -> 'a t
  val void : 'a t -> unit t
end