Mónada más potente que aplicativo?

Mirédiscusión pasada pero no podía ver por qué ninguna de las respuestas es correcta.

Aplicativo

<*> :: f (a -> b) -> f a -> f b

Monada

(>>=) :: m a -> (a -> m b) -> m b

Entonces, si lo hago bien, la afirmación es que>>=&nbsp;no se puede escribir solo asumiendo la existencia de<*>

Bueno, supongamos que tengo<*>.

Y quiero crear>>=.

Así que tengof a.

yo tengof (a -> b).

Ahora cuando lo miras,f (a -> b)&nbsp;Se puede escribir como(a -> b)&nbsp;(si algo es una función de x, y, z, entonces también es una función de x, y).

Entonces de la existencia de<*>&nbsp;obtenemos(a -> b) -> f a -> f b&nbsp;que de nuevo se puede escribir como((a -> b) -> f a) -> f b, que se puede escribir como(a -> f b).

Entonces tenemosf a, tenemos(a -> f b)y sabemos que<*>&nbsp;resultados enf b, entonces obtenemos:

f a -> (a -> f b) -> f b

que es una mónada

En realidad, en un lenguaje más intuitivo: al implementar<*>, Extraigo(a -> b)&nbsp;fuera def(a -> b), Extraigoa&nbsp;fuera def ay luego aplico(a -> b)&nbsp;ena&nbsp;y obtenb&nbsp;que envuelvo conf&nbsp;para finalmente obtenerf b.

Entonces hago casi lo mismo para crear>>=. Después de aplicar(a -> b)&nbsp;ena&nbsp;y conseguirb, da un paso más y envuélvelo confentonces regresof b, por lo tanto sé que tengo una función(a -> f b).