# Module do

The Do Module.

The Do Module.

## Data Types

### applicative()

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

### either()

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

### fn()

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

### fn()

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

### fn()

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

### foldable()

foldable(A) = [A] | maybe(A) | either(term(), A)

### functor()

functor(A) = [A] | map(A) | fn(term(), A) | either(term(), A) | maybe(A)

### map()

map(A) = #{term() := A}

### maybe()

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

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

### semigroup()

semigroup(A) = [A] | map(A) | either(term(), A) | maybe(A)

### traversable()

traversable(A) = [A] | either(term(), A) | maybe(A)

## Function Index

 append/2 bind/2 do/2 fmap/2 foldr/3 liftA2/2 liftm/2 liftmz/2 mod/1 pure/1 sequence/1 then/2 traverse/2

## Function Details

### append/2

append(S1::semigroup(A), S2::semigroup(A)) -> semigroup(A)

### fmap/2

fmap(F::fn(A, B), Functor::functor(A)) -> functor(B)

### foldr/3

foldr(F::fn(A, B, B), B, Foldable::foldable(A)) -> B

### liftA2/2

liftA2(A1::applicative(fn(A, B)), A2::applicative(A)) -> applicative(B)

### mod/1

mod(Type::term()) -> atom()

### sequence/1

sequence(Traversable::traversable(applicative(A))) -> applicative(traversable(A))