Я вивчаю додатки 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, але я не зовсім впевнений, чому.