Module Exception

module Exception: sig .. end
Exception is a purely functional replacement of OCaml's built-in exceptions.

To indicate a normal value use Exception.return. For exceptional conditions use Exception.throw. Function Exception.catch splices in an exception handler into the thread of control. Execute an exception monad with Exception.run.


type ('left, 'right) t 
Type of an exception monad. 'left is the exception's type and 'right is the normal value's type.
val bind : ('left, 'right) t ->
('right -> ('left, 'new_right) t) ->
('left, 'new_right) t
bind a_monad a_function

Apply a_function to a_monad producing another monad. a_function takes a normal value as argument and returns a monad.

val return : 'right -> ('left, 'right) t
return a_normal_value

Answer a_normal_value.

val throw : 'left -> ('left, 'right) t
throw an_exception

Answer an_exception, or in other words, throw an_exception.

val catch : ('left, 'right) t ->
('left -> ('new_left, 'right) t) -> ('new_left, 'right) t
catch a_monad an_exception_handler

Catch exceptions from a_monad and feed them into an_exception_handler. an_exception_handler takes an exceptional value as argument and returns a monad.

val run : ('left -> 'a) -> ('right -> 'a) -> ('left, 'right) t -> 'a
run a_failure_function a_success_function a_monad

Run a_monad. If a_monad does not Exception.throw an exception, pass the result of evaluating the monad to a_success_function. Otherwise, if the a_monad throws, pass the exception to a_failure_function.