This module describes a structure intermediate between a functor and
a monad (technically, a strong lax monoidal functor). Compared with
monads, this interface lacks the full power of the binding operation
>>=, but

it has more instances.

it is sufficient for many uses, e.g. context-free parsing, or the
Traversable class.

instances can perform analysis of computations before they are
executed, and thus produce shared optimizations.

This interface was introduced for parsers by Niklas Röjemo, because
it admits more sharing than the monadic interface. The names here are
mostly based on parsing work by Doaitse Swierstra.