sig
  type ('a, 'b) withres =
    ('a, 'b) W(Identity).withres = {
    cons : 'a -> 'b Identity.m;
    fin : 'b -> unit Identity.m;
  }
  val bindres :
    ('a, 'b) withres -> 'a -> ('b -> 'c Identity.m) -> 'c Identity.m
  val with_alt :
    ('a, 'b) withres ->
    ('c, 'b) withres -> ('a * 'c, exn option * 'b) withres
  val with_identity : ('a, 'a) withres
  val premap : ('a -> 'b) -> ('b, 'c) withres -> ('a, 'c) withres
  type dir_abstract = W(Identity).dir_abstract
  val with_sys_chdir : (string, dir_abstract) withres
end