The MonadRec.Instance provides the means to combine
MonadRec instances with other type-classes.
Laws for MonadRec.
The MonadRec.Type should be inherited in type-classes that
are derived from MonadRec.
A reusable implementation for MonadRec.tailRecM that relies on
NOTE: this is UNSAFE to use in case flatMap is not