fun_land v0.6.1 FunLandic.Maybe

Summary

Functions

Callback implementation for FunLand.Chainable.chain/2

This is called internally whenever a YourMonad.chain() operation fails

Free implementation wrap Mappable.map for Applicative

A variant of reduce/3 that accepts anything that is Combinable as second argument. This Combinable will determine what the neutral value and the combining operation will be

Converts the reducable into a list, by building up a list from all elements, and in the end reversing 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’

Functions

apply_discard_left(a, b)

See FunLand.Applicative.apply_discard_left/2.

apply_discard_right(a, b)

See FunLand.Applicative.apply_discard_right/2.

apply_with(arg1, arg2)

Callback implementation for FunLand.Appliable.apply_with/2.

chain(maybe, fun)

Callback implementation for FunLand.Chainable.chain/2.

combine(arg1, arg2)
fail(var, expr)

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.

from_just(maybe)
guard(predicate)
just(x)
map(a, function)

Free implementation wrap Mappable.map for Applicative

neutral()
nothing()
reduce(a, combinable)

A variant of reduce/3 that accepts anything that is Combinable as second argument. This Combinable will determine what the neutral value and the combining operation will be.

reduce(maybe, acc, fun)

Callback implementation for FunLand.Reducable.reduce/3.

to_list(reducable)

Converts the reducable into a list, by building up a list from all elements, and in the end reversing it.

This is an automatic function implementation, made possible because Elixir.FunLandic.Maybe implements the FunLand.Reducable behaviour.

traverse(maybe)
wrap(x)

Callback implementation for FunLand.Applicative.wrap/1.

Macros

monadic(list)

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:

  1. Every normal line returns a new instance of the monad.
  2. You can write x <- some_expr_returning_a_monad_instance to bind x to whatever is inside the monad. You can then use x on any subsequent lines.
  3. If you want to use one or multiple statements, use let something = some_statement or let 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.