Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Reader.ml1 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 29 30 31 32module type S = sig type env val read : unit -> env val scope : (env -> env) -> (unit -> 'a) -> 'a val run : env:env -> (unit -> 'a) -> 'a val register_printer : ([`Read] -> string option) -> unit end module Make (Env : Sigs.Type) = struct type _ Effect.t += Read : Env.t Effect.t let read () = Effect.perform Read let run ~(env:Env.t) f = let open Effect.Deep in try_with f () { effc = fun (type a) (eff : a Effect.t) -> match eff with | Read -> Option.some @@ fun (k : (a, _) continuation) -> continue k env | _ -> None } let scope f c = run ~env:(f @@ read ()) c let register_printer f = Printexc.register_printer @@ function | Effect.Unhandled Read -> f `Read | _ -> None let () = register_printer @@ fun _ -> Some "Unhandled algaeff effect; use Algaeff.Reader.run" end