Module Lazy.Exn

Interacting between monads and language exceptions

val expect : ?finally:(unit -> unit t) -> f:(unit -> 'a t) -> catch:(exn -> 'a t) -> 'a t

expect ?finally ~f ~catch evaluates f (), if an exception e is raised during the evaluation (or call) then the result of whole computation will be catch e. If an optional argument ?finally is passed the finally is called after f () computation or after catch e if an exception was raised.