MonadEx v1.1.3 Monad.Maybe View Source

A monad that represents something or nothing.

The concept of having something vs. nothing is similar to having a value vs. nil.

Link to this section Summary

Types

The possible types of values that can occur (i.e. something and nothing)

t()

Functions

Callback implementation of Monad.Behaviour.bind/2

Returns a “nothing” state

Macro that indicates if the maybe monad contains nothing

An alias for some/1

Callback implementation of Monad.Behaviour.return/1

Wraps the value into a maybe monad

Macro that indicates if the maybe monad contains something

Unwraps the value from a maybe monad

Link to this section Types

Link to this type maybe_type() View Source
maybe_type() :: :some | :none

The possible types of values that can occur (i.e. something and nothing).

Link to this section Functions

Link to this function bind(maybe, fun) View Source
bind(t(), (term() -> t())) :: t()

Callback implementation of Monad.Behaviour.bind/2.

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

For none monads, none is returned without evaluating fun.

iex> m = some 42
iex> bind m, (& some &1 * 2)
%Monad.Maybe{type: :some, value: 84}

iex> bind none(), (& some &1 * 2)
%Monad.Maybe{type: :none, value: nil}

Returns a “nothing” state.

Macro that indicates if the maybe monad contains nothing.

This macro may be used in guard clauses.

iex> none? none()
true
iex> none? some 42
false

An alias for some/1.

Link to this function return(value) View Source
return(term()) :: t()

Callback implementation of Monad.Behaviour.return/1.

Wraps the value in a maybe monad.

iex> return 42
%Monad.Maybe{type: :some, value: 42}

Wraps the value into a maybe monad.

iex> some 42
%Monad.Maybe{type: :some, value: 42}

Macro that indicates if the maybe monad contains something.

This macro may be used in guard clauses.

iex> some? none()
false
iex> some? some 42
true
Link to this function unwrap!(maybe) View Source
unwrap!(t()) :: term()

Unwraps the value from a maybe monad.

Does not work with none values, since they contain nothing.

iex> m = some 42
iex> unwrap! m
42