fun_land v0.5.0 FunLandic.Reader
The Reader monad wraps a function that returns the contained value when asked. This is nice, as you can call things inside the Reader context, and only refer to the things inside the Reader when you require them. It thus enables lighter parameter-passing.
Summary
Functions
Callback implementation for FunLand.Appliable.apply_with/2
Callback implementation for FunLand.Chainable.chain/2
This is called internally whenever a YourMonad.chain()
operation fails
Free implementation wrap Mappable.map for Applicative
Callback implementation for FunLand.Applicative.wrap/1
Macros
Allows you to write multiple consecutive operations using this monad on new lines. This is called ‘monadic do-notation’
Functions
Callback implementation for FunLand.Appliable.apply_with/2
.
Callback implementation for FunLand.Chainable.chain/2
.
This is called internally whenever a YourMonad.chain()
operation fails.
For most monads, the default behaviour of crashing is great. For some, you might want to override it.
Callback implementation for FunLand.Applicative.wrap/1
.
Macros
Allows you to write multiple consecutive operations using this monad on new lines. This is called ‘monadic do-notation’.
For more info, see FunLand.Monad.monadic
Rules:
- Every normal line returns a new instance of the monad.
- You can write
x <- some_expr_returning_a_monad_instance
to bindx
to whatever is inside the monad. You can then usex
on any subsequent lines. - If you want to use one or multiple statements, use
let something = some_statement
orlet something = do ...
The final line is of course expected to also return an instance of the monad.
Use wrap
at any time to wrap a value back into a monad if you need.
Inside the monadic context, the module of the monad that was defined is automatically imported.
Any local calls to e.g. wrap
, apply
, chain
or functions you’ve defined yourself in your monad module will thus be called on your module.