open Cupto;; type 'a toplevel = 'a prompt;; type ('a,'b) fcont = 'a -> 'b;; let shift toplevel a = cupto toplevel (fun k -> set toplevel (fun () -> a k));; let callcc toplevel a = shift toplevel (fun k -> k (fun () -> (a (fun r -> k (fun () -> r))))) ();; let throw toplevel v1 v2 = shift toplevel (fun k -> v1 v2);; let eval a = let toplevel = new_prompt () in set toplevel (fun () -> a toplevel) ;; let reset = set;;