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>>= 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) pode ser escrito como(a -> b) (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<*> Nós temos(a -> b) -> f a -> f b 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<*> 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) fora def(a -> b)Eu extraioa fora def ae depois aplico(a -> b) ema e pegueb que envolvo comf finalmente conseguirf b.

Então eu faço quase o mesmo para criar>>=. Depois de aplicar(a -> b) ema 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).

questionAnswers(2)

yourAnswerToTheQuestion