Uczę się Aplikacji Haskella. Wydaje mi się (prawdopodobnie się mylę), że purefunkcja nie jest tak naprawdę potrzebna, na przykład:
pure (+) <*> [1,2,3] <*> [3,4,5]
można zapisać jako
(+) <$> [1,2,3] <*> [3,4,5]
Czy ktoś może wyjaśnić zalety tej purefunkcji w porównaniu z jawnym mapowaniem fmap?
purepozwala na użycie, no cóż, „czystych” wartości w obliczeniach aplikacyjnych. Chociaż, jak poprawnie obserwować, pure f <*> xjest taka sama jak f <$> x, nie ma takiego ekwiwalent za, powiedzmy f <*> x <*> pure y <*> z. (Przynajmniej nie sądzę.)
Monoidklasą - w którym pureodpowiada Monoidelement tożsamości. (Sugeruje to, że Applicativebez puremoże być interesujące, ponieważ Semigroup- które Monoidniekoniecznie musi mieć tożsamość - wciąż jest używane. Właściwie, teraz myślę o tym, wydaje mi się, że PureScript ma dokładnie taką pureklasę „Aplikacja bez ”, chociaż nie nie wiem, do czego służy).
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z, tak myślę. Pomysł tkwi w Applicativedokumentacji jako prawo „wymiany”.
pure f <*> xjest dokładnie taki sam jakfmap f x. Jestem pewien, że istnieje jakiś powód, dla któregopurezostał włączonyApplicative, ale nie jestem do końca pewien, dlaczego.