**Behaviours:** `do_applicative`, `do_foldable`, `do_functor`, `do_monad`, `do_monoid`, `do_semigroup`, `do_traversable`.

`applicative(A) = [A] | fn(term(), A) | either(term(), A) | maybe(A)`

`either(A, B) = {error, A} | {ok, B}`

`fn(A, B, C) = fun((A, B) -> C)`

`fn(A) = fun(() -> A)`

`fn(A, B) = fun((A) -> B)`

`maybe(A) = {just, A} | nothing`

`monad(A) = [A] | either(term(), A) | maybe(A)`

`cat_maybes(Maybes::[maybe(A)]) -> [A]`

`from_just(Maybe::maybe(A)) -> A`

`from_maybe(A, Maybe::maybe(A)) -> A`

`is_just(Maybe::maybe(term())) -> boolean()`

`is_nothing(A::maybe(term())) -> boolean()`

`list_to_maybe(X1::[A]) -> maybe(A)`

`maybe_to_list(Maybe::maybe(A)) -> [A]`

`mempty() -> maybe(term())`

`pure(A) -> maybe(A)`

`sequence(Maybe::maybe(applicative(A))) -> applicative(maybe(A))`

`traverse(F::fn(A, applicative(B)), Maybe::maybe(A)) -> applicative(maybe(B))`

*Generated by EDoc*