ฉันกำลังเรียนผู้สมัครของ 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
แต่ฉันไม่แน่ใจว่าทำไม