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.