## Monad bind() function and the >> operator

The name of the PyMonad library comes from the functional programming concept of a `monad`

, a function that has a strict order. The underlying assumption behind much functional programming is that functional evaluation is liberal: it can be optimized or rearranged as necessary. A monad provides an exception that imposes a strict left-to-right order.

Python, as we have seen, is strict. It doesn't *require* monads. We can, however, still apply the concept in places where it can help clarify a complex algorithm.

The technology for imposing strict evaluation is a binding between a monad and a function that will return a monad. A *flat* expression will become nested bindings that can't be reordered by an optimizing compiler. The `bind()`

function is mapped to the `>>`

operator, allowing us to write expressions like this:

Just(some file) >> read header >> read next >> read next

The preceding expression would be converted to the following...