Я изучаю Притчи Хаскеля. Мне кажется (я, вероятно, ошибаюсь), что pureфункция на самом деле не нужна, например:
pure (+) <*> [1,2,3] <*> [3,4,5]
можно записать как
(+) <$> [1,2,3] <*> [3,4,5]
Может кто-нибудь объяснить преимущество, которое pureдает функция по сравнению с явным отображением fmap?
pureпозволяет использовать, ну, «чистые» значения в вычислениях Applicative. Хотя, как вы правильно заметили, pure f <*> xэто то же самое, что f <$> x, например , не существует такого эквивалента f <*> x <*> pure y <*> z. (По крайней мере, я так не думаю.)
Monoidклассом - в которой pureсоответствует Monoidэлемент идентичности России. (Это говорит о том, что Applicativeбез pureможет быть интересным, поскольку Semigroup- то есть Monoidбез необходимости иметь идентичность - все еще используется. На самом деле, теперь я думаю об этом, мне кажется, я вспоминаю, что PureScript имеет именно такой pureкласс «Applicative без », хотя я не не знаю, для чего он используется.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z, я думаю. Идея есть в Applicativeдокументации как закон "обмена".
pure f <*> xэто точно так же, какfmap f x. Я уверен, что есть некоторые причины, по которым онpureбыл включенApplicative, но я не совсем уверен, почему.