FunLand.Builtin.List (fun_land v0.10.0)

Link to this section Summary

Functions

Callback implementation for FunLand.Chainable.chain/2.

Callback implementation for FunLand.Combinable.empty/0.

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

Free implementation new Mappable.map as FunLand.Builtin.List is Applicative

Allows you to write multiple consecutive operations using this monad on new lines. This is called 'monadic do-notation'.

Callback implementation for FunLand.Applicative.new/1.

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

Callback implementation for FunLand.Reducible.reduce/3.

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

An Example of using traverse

Link to this section Functions

Link to this function

apply_discard_left(a, b)

See FunLand.Applicative.apply_discard_left/2.

Link to this function

apply_discard_right(a, b)

See FunLand.Applicative.apply_discard_right/2.

Link to this function

apply_with(list, b)

Callback implementation for FunLand.Appliable.apply_with/2.

Link to this function

chain(list, fun)

Callback implementation for FunLand.Chainable.chain/2.

Link to this function

combine(list_a, list_b)

Callback implementation for FunLand.Combinable.empty/0.

Link to this function

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.

Link to this function

guard(predicate)

Link to this function

map(a, function)

Free implementation new Mappable.map as FunLand.Builtin.List is Applicative

Link to this macro

monadic(list)

(macro)

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 normal 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 new at any time to new 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. new, apply, chain or functions you've defined yourself in your monad module will thus be called on your module.

Callback implementation for FunLand.Applicative.new/1.

Link to this function

reduce(a, combinable)

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

Pass in the combinable module name to start with empty as accumulator, or the combinable as struct to use that as starting accumulator.

This is an automatic function implementation, made possible because FunLand.Builtin.List implements the FunLand.Reducible behaviour.

See FunLand.Reducible.reduce/2 for examples.

Link to this function

reduce(list, acc, fun)

Callback implementation for FunLand.Reducible.reduce/3.

Link to this function

to_list(reducible)

Converts the reducible 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 FunLand.Builtin.List implements the FunLand.Reducible behaviour.

Link to this function

traverse(list, result_module, fun)

An Example of using traverse:

iex> FunLand.Traversable.traverse([1, 2, 3], FunLandic.Maybe, fn x -> FunLandic.Maybe.just(x) end)
FunLandic.Maybe.just([1, 2, 3])
iex> FunLand.Traversable.traverse([1, 2, 3], [], fn x -> [x,x] end)
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3],
[1, 2, 3]]