Declarative handling of results and errors in OCaml
