tezos-error-monad

Tezos: error monad
Library tezos-error-monad
val return : 'a -> ( 'a, 'e ) result

return x is Ok x.

val return_unit : ( unit, 'e ) result

return_unit is Ok ().

val return_none : ( 'a option, 'e ) result

return_none is Ok None.

val return_some : 'a -> ( 'a option, 'e ) result

return_some x is Ok (Some x).

val return_nil : ( 'a list, 'e ) result

return_nil is Ok [].

val return_true : ( bool, 'e ) result

return_true is Ok true.

val return_false : ( bool, 'e ) result

return_false is Ok false.

Note that we do not provide return_ok nor return_error. Both of these functions are possible but somewhat confusing and rarely useful in practice. If you need to carry results within a Result-monad computation (yielding to values of the type (('a, 'e) result, 'e) result), you need to do so by hand: return (Ok …) and return (Error …).

val fail : 'e -> ( 'a, 'e ) result

fail e is Error e. It is also an alias for error.

val let* : ( 'a, 'e ) result -> ( 'a -> ( 'b, 'e ) result ) -> ( 'b, 'e ) result

let* is a binding operator alias for Result.bind and >>?.

val let+ : ( 'a, 'e ) result -> ( 'a -> 'b ) -> ( 'b, 'e ) result

let+ is a binding operator alias for Result.map and >|?.

Note that we do not provide and* nor and+. Both of these are possible but their type is unsatisfying because the errors do not compose well. You can use both (below) if need be.

val join : ( unit, 'e ) result list -> ( unit, 'e list ) result

join is the joining of success/failure unit values.

val all : ( 'a, 'e ) result list -> ( 'a list, 'e list ) result

all is the joining of success/failure non-unit values.

val both : ( 'a, 'e ) result -> ( 'b, 'e ) result -> ( 'a * 'b, 'e list ) result

both is the joining of two success/failure non-unit values.