Saya sedang belajar Aplikasi Haskell. Sepertinya saya (saya mungkin salah) bahwa purefungsi 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 purefungsi tersebut daripada pemetaan eksplisit fmap?
purememungkinkan seseorang untuk menggunakan, baik, nilai "murni" dalam perhitungan Applicative. Sementara, seperti yang Anda amati dengan benar, pure f <*> xsama dengan f <$> x, tidak ada yang setara untuk, katakanlah f <*> x <*> pure y <*> z,. (Setidaknya saya tidak berpikir begitu.)
Monoidkelas penting - di mana puresesuai dengan Monoidelemen identitas. (Ini menunjukkan bahwa Applicativetanpa purebisa menarik, karena Semigroup- yang merupakan Monoidtanpa harus memiliki identitas - masih digunakan. Sebenarnya, sekarang saya berpikir tentang hal itu, saya ingat PureScript memiliki purekelas "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 Applicativedokumentasi sebagai hukum "pertukaran".
pure f <*> xpersis sama denganfmap f x. Saya yakin ada beberapa alasan mengapapuredisertakanApplicative, tetapi saya tidak sepenuhnya yakin mengapa.