Я изучаю Притчи Хаскеля. Мне кажется (я, вероятно, ошибаюсь), что 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
, но я не совсем уверен, почему.