Mônada mais poderosa que Aplicativa?

Eu olheidiscussão anterior mas não conseguia entender por que algumas das respostas estão realmente corretas.

Aplicável

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

Mônada

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

Então, se eu acertar, a alegação é que>>=&nbsp;não pode ser escrito assumindo apenas a existência de<*>

Bem, vamos supor que eu tenho<*>.

E eu quero criar>>=.

Então eu tenhof a.

eu tenhof (a -> b).

Agora, quando você olha para isso,f (a -> b)&nbsp;pode ser escrito como(a -> b)&nbsp;(se algo é uma função de x, y, z - também é uma função de x, y).

Então, a partir da existência de<*>&nbsp;Nós temos(a -> b) -> f a -> f b&nbsp;que novamente pode ser escrito como((a -> b) -> f a) -> f b, que pode ser escrito como(a -> f b).

Então nós temosf a, temos(a -> f b)e sabemos que<*>&nbsp;resulta emf b, então obtemos:

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

que é uma mônada.

Na verdade, em uma linguagem mais intuitiva: ao implementar<*>Eu extraio(a -> b)&nbsp;fora def(a -> b)Eu extraioa&nbsp;fora def ae depois aplico(a -> b)&nbsp;ema&nbsp;e pegueb&nbsp;que envolvo comf&nbsp;finalmente conseguirf b.

Então eu faço quase o mesmo para criar>>=. Depois de aplicar(a -> b)&nbsp;ema&nbsp;e recebendob, execute mais uma etapa e envolva-a comfentão eu voltof b, portanto, eu sei que tenho uma função(a -> f b).