В настоящее время я изучаю связи между монадами и аппликативными функторами.
Я вижу две реализации для ap:
ap m1 m2 = do { f <- m1 ; x <- m2 ; return (f x) }
и
ap m1 m2 = do { x <- m2 ; f <- m1 ; return (f x) }
Второй отличается, однако, будет ли это хорошей реализацией для <*>
?
Я потерялся в доказательстве pure (.) <*> u <*> v <*> w = u <*> (v <*> w)
Я пытаюсь получить интуицию "какая часть монады является аппликативным функтором"...