The Monad type-class is a structure that represents
computations defined as sequences of steps: : a type with
a monad structure defines what it means to chain operations
together, or nest functions of that type.
Monads for functional programming
The purpose of this type-class is to support the data-types in the
Monix library and it is considered a shim for a lawful type-class
to be supplied by libraries such as Cats or Scalaz or equivalent.
To implement it in instances, inherit from MonadClass.
Credit should be given where it is due.The type-class encoding has
been copied from the Scado project and
Scalaz 8 and the type has
been extracted from Cats.