MonadEx v1.1.0 Monad.Result

A monad that represents success and failure conditions.

In a series of bind operations, if any function returns an error monad, the following binds are skipped. This allows for easy flow control for both success and error cases.

Summary

Types

The standard tuple format for representing success and error states

The possible types of results that can occur (i.e. success and failure)

t()

Functions

Callback implementation of Monad.Behaviour.bind/2

Wraps a value in an error monad

Returns true if the given monad contains an error state

Converts a standard success/failure tuple to a Monad.Result

Callback implementation of Monad.Behaviour.return/1

Wraps a value in a success monad

Returns true if the given monad contains a success state

Unwraps the value from a success monad

Types

result_tuple()

The standard tuple format for representing success and error states.

These tuples are easily converted to a Monad.Result.

result_type()
result_type :: :ok | :error

The possible types of results that can occur (i.e. success and failure).

t()
t

Functions

bind(result, fun)
bind(t, (term -> t)) :: t

Callback implementation of Monad.Behaviour.bind/2.

If the monad contains a success state, then the value is unwrapped and applied to fun.

For monads containing an error state, the error is returned as is.

iex> s = success 42
iex> r = bind s, (& success &1 * 2)
iex> r.value
84
iex> r.error
nil

iex> s = success 42
iex> r = bind s, fn _ -> error "Failed" end
iex> r.value
nil
iex> r.error
"Failed"
error(error)
error(term) :: t

Wraps a value in an error monad.

iex> e = error "Failed"
iex> e.value
nil
iex> e.error
"Failed"
error?(result)
error?(t) :: boolean

Returns true if the given monad contains an error state.

iex> e = error "Failed"
iex> error? e
true
from_tuple(arg)
from_tuple(result_tuple) :: t

Converts a standard success/failure tuple to a Monad.Result.

iex> s = from_tuple {:ok, 42}
iex> s.value
42
iex> s.error
nil

iex> e = from_tuple {:error, "Failed"}
iex> e.value
nil
iex> e.error
"Failed"
return(value)
return(term) :: t

Callback implementation of Monad.Behaviour.return/1.

Wraps a value in a success monad.

iex> s = return 42
iex> s.value
42
iex> s.error
nil
success(value)
success(term) :: t

Wraps a value in a success monad.

iex> s = success 42
iex> s.value
42
iex> s.error
nil
success?(result)
success?(t) :: boolean

Returns true if the given monad contains a success state.

iex> s = success 42
iex> success? s
true
unwrap!(result)
unwrap!(t) :: term

Unwraps the value from a success monad.

Does not work with error monads.

iex> s = success 42
iex> unwrap! s
42