1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
(* TEST
*)
open Effect
open Effect.Deep
type _ t += E : unit t
exception Done
let handle_partial f =
try_with f ()
{ effc = fun (type a) (e : a t) ->
match e with
| E -> Some (fun k -> assert false)
| _ -> None }
let f () x = perform E
let () =
match_with (handle_partial f) ()
{ retc = (fun x -> assert false);
exnc = (function
| Done -> print_string "ok\n"
| e -> raise e);
effc = fun (type a) (e : a t) ->
match e with
| E -> Some (fun (k : (a, _) continuation) -> discontinue k Done)
| _ -> None }
|