# Monad

`trait Monad[m: Type -> Type] with Applicative[m]`

SourceA trait for applicatives that support monadic bind (`flatMap`

), i.e., allow to apply a function
that takes a normal value and produces a monadic value to a monadic value. That is, the bind mechanism
supports extraction of monadic values, or, viewed differently, allows to combine (flatten) nested
monadic values (`flapMap`

can be understood as a `Functor.map`

followed by a `flatten`

).

## Signatures

## Module Definitions

`<=<`

is an operator alias for `kleisliRight`

.

`=<<`

is an operator alias for `flatMap`

.

`>=>`

is an operator alias for `kleisliLeft`

.

`>>=`

is the operator `=<<`

with its arguments flipped.

`>>=`

is the monadic bind operator.

The monadic `join`

operator.
Flatten `x`

- a monadic action nested in an outer monadic layer - to a single layer.

E.g. for the Option monad: `flatten(Some(Some(1)))`

becomes `Some(1)`

.