Estoy aprendiendo los aplicantes de Haskell. Me parece (probablemente estoy equivocado) que la purefunción no es realmente necesaria, por ejemplo:
pure (+) <*> [1,2,3] <*> [3,4,5]
Se puede escribir como
(+) <$> [1,2,3] <*> [3,4,5]
¿Alguien puede explicar el beneficio que pureproporciona la función sobre el mapeo explícito fmap?
purepermite usar, bueno, valores "puros" en un cálculo aplicativo. Si bien, como se observa correctamente, pure f <*> xes el mismo que f <$> x, no hay tal equivalente para, por ejemplo, f <*> x <*> pure y <*> z. (Al menos no lo creo)
Monoidclase importante , en la que purecorresponde al Monoidelemento de identidad. (Esto sugiere que Applicativesin purepodría ser interesante, ya Semigroupque, que es un Monoidsin tener necesariamente una identidad, todavía se usa. En realidad, ahora que lo pienso, parece recordar que PureScript tiene exactamente esa pureclase de "Aplicativo sin ", aunque no no sé para qué se usa.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z, creo. La idea está en la Applicativedocumentación como la ley del "intercambio".
pure f <*> xes exactamente lo mismo quefmap f x. Estoy seguro de que hay alguna razón por la quepurese incluyóApplicative, pero no estoy completamente seguro de por qué.