ฉันกำลังเรียนผู้สมัครของ 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 มีคลาส "Applicative ปราศจากpure" แม้ว่าฉันจะไม่ ไม่รู้ว่ามันใช้ทำอะไร)
fmap (\f' x' z' -> f' x' y z') f <*> x <*> zฉันคิดว่า แนวคิดนี้อยู่ในApplicativeเอกสารตามกฎหมายของ "การแลกเปลี่ยน"
pure f <*> xเหมือนกันfmap f xทุกประการ ฉันแน่ใจว่ามีเหตุผลบางอย่างที่pureรวมอยู่ในApplicativeแต่ฉันไม่แน่ใจว่าทำไม