Relación entre Functor, Funcionario aplicativo y Monad

Al leer sobre las clases de tipos, he visto que la relación entre los Funtores, los Funcionarios Aplicativos y las Mónadas es estrictamente creciente. Los functores son tipos que se pueden asignar. Los Funcionarios Aplicativos pueden hacer lo mismo conciert efectos. Mónadas lo mismo conposiblemente no restrictivo efectos. Además

Every Monad is an Applicative Functor
Every Applicative Functor is a Functor

La definición del Fundador Aplicativo lo muestra claramente con:

class Functor f => Applicative f where
  pure  :: a -> f a
  (<*>) :: f (a -> b) -> f a -> f b

Pero la definición de Monad es:

class Monad m where
  return :: a -> m a
  (>>=)  :: m a -> (a -> m b) -> m b
  (>>)   :: m a -> m b -> m b
  m >> n = m >>= \_ -> n
  fail   :: String -> m a

Según el gran @ de Brent Yorg typeclassopedia que una definición alternativa de mónada podría ser:

class Applicative m => Monad' m where
  (>>=) :: m a -> (a -> m b) -> m b

que obviamente es más simple consolidaría ese Functor <Funcional aplicativo <Mónada. Entonces, ¿por qué no es esta la definición? Sé que los functores aplicativos son nuevos, pero según Informe Haskell 2010 página 80, esto no ha cambiado. ¿Por qué es esto

Respuestas a la pregunta(4)

Su respuesta a la pregunta