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