Я вивчаю додатки Haskell Мені здається (я, мабуть, помиляюся), що pure
функція насправді не потрібна, наприклад:
pure (+) <*> [1,2,3] <*> [3,4,5]
можна записати як
(+) <$> [1,2,3] <*> [3,4,5]
Чи може хтось пояснити перевагу, яку pure
функція забезпечує над явним відображенням fmap
?
pure
дозволяє використовувати, ну, "чисті" значення в додатковому обчисленні. Хоча, як ви правильно зауважуєте, pure f <*> x
те саме f <$> x
, що, скажімо, немає такого еквівалента f <*> x <*> pure y <*> z
. (Принаймні, я так не думаю.)
Monoid
класом -, що pure
відповідає Monoid
елементу тотожності. (Це говорить про те, що Applicative
без цього не pure
може бути цікаво, оскільки Semigroup
- що є Monoid
без обов'язково мати ідентичність - все ще використовується. Насправді, зараз я думаю про це, я, мабуть, нагадую, що PureScript має саме такий pure
клас "Додаток без ", хоча я не Не знаю, для чого це використовується.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z
, я думаю. Ідея є в Applicative
документації як закон "обміну".
pure f <*> x
точно так само, якfmap f x
. Я впевнений, що є якась причина, чомуpure
її включилиApplicative
, але я не зовсім впевнений, чому.