sig
  type 'a m
  type 'a prompt
  val return : 'a -> 'a Cc.m
  val bind : 'a Cc.m -> ('a -> 'b Cc.m) -> 'b Cc.m
  val run : 'a Cc.m -> 'a
  val new_prompt : unit -> 'a Cc.prompt Cc.m
  val pushP : 'a Cc.prompt -> 'a Cc.m -> 'a Cc.m
  val shiftP : 'a Cc.prompt -> (('b Cc.m -> 'a Cc.m) -> 'a Cc.m) -> 'b Cc.m
end