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>>= 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) Se puede escribir como(a -> b) (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<*> obtenemos(a -> b) -> f a -> f b 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<*> 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) fuera def(a -> b), Extraigoa fuera def ay luego aplico(a -> b) ena y obtenb que envuelvo conf para finalmente obtenerf b.

Entonces hago casi lo mismo para crear>>=. Después de aplicar(a -> b) ena 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).

Respuestas a la pregunta(2)

Su respuesta a la pregunta