open Effect open Effect.Deep module type Console = sig val read : unit -> string val write : string -> unit end type _ Effect.t += Console : (module Console) t let ask () = perform Console let main () = let module Console = (val ask ()) in Console.write "enter your name:"; let name = Console.read () in Console.write ("Hello, "^name) (*****) let handler f = match f () with | effect Console, k -> continue k (module struct let read = read_line let write = print_endline end) | ret -> ret let _ = handler main