MonadEx v1.1.3 Monad.Behaviour behaviour View Source
A behaviour that provides the common code for monads.
Creating a monad consists of three steps:
- Call
use Monad.Behaviour
- Implement
return/1
- Implement
bind/2
By completing the above steps, the monad will automatically conform to the
Functor
and Applicative
protocols in addition to the Monad
protocol.
Example
The following is an example showing how to use Monad.Behaviour
.
iex> defmodule Monad.Identity.Sample do
...> use Elixir.Monad.Behaviour # The `Elixir` prefix is needed for the doctest.
...>
...> defstruct value: nil
...>
...> def return(value) do
...> %Monad.Identity.Sample{value: value}
...> end
...>
...> def bind(%Monad.Identity.Sample{value: value}, fun) do
...> fun.(value)
...> end
...>
...> def unwrap(%Monad.Identity.Sample{value: value}) do
...> value
...> end
...> end
iex> m = Monad.Identity.Sample.return 42
iex> Monad.Identity.Sample.unwrap m
42
iex> m2 = Elixir.Monad.bind m, (& Monad.Identity.Sample.return(&1 * 2))
iex> Monad.Identity.Sample.unwrap m2
84
Link to this section Summary
Link to this section Types
Link to this section Functions
Calls module
’s bind/2
function.
Unwraps monad
then applies the wrapped value to fun
. Returns a new monad.
Calls module
’s return/1
function.
Wraps the given value in the specified monad.