Saya sedang belajar Aplikasi Haskell. Sepertinya saya (saya mungkin salah) bahwa pure
fungsi ini tidak benar-benar diperlukan, misalnya:
pure (+) <*> [1,2,3] <*> [3,4,5]
dapat ditulis sebagai
(+) <$> [1,2,3] <*> [3,4,5]
Adakah yang bisa menjelaskan manfaat yang diberikan pure
fungsi tersebut daripada pemetaan eksplisit fmap
?
pure
memungkinkan seseorang untuk menggunakan, baik, nilai "murni" dalam perhitungan Applicative. Sementara, seperti yang Anda amati dengan benar, pure f <*> x
sama dengan f <$> x
, tidak ada yang setara untuk, katakanlah f <*> x <*> pure y <*> z
,. (Setidaknya saya tidak berpikir begitu.)
Monoid
kelas penting - di mana pure
sesuai dengan Monoid
elemen identitas. (Ini menunjukkan bahwa Applicative
tanpa pure
bisa menarik, karena Semigroup
- yang merupakan Monoid
tanpa harus memiliki identitas - masih digunakan. Sebenarnya, sekarang saya berpikir tentang hal itu, saya ingat PureScript memiliki pure
kelas "Applicative without " yang persis seperti itu , walaupun saya tidak tau untuk apa itu digunakan.)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> z
, saya pikir. Idenya dalam Applicative
dokumentasi sebagai hukum "pertukaran".
pure f <*> x
persis sama denganfmap f x
. Saya yakin ada beberapa alasan mengapapure
disertakanApplicative
, tetapi saya tidak sepenuhnya yakin mengapa.