Hackage มีหลายแพ็คเกจสำหรับ monad transformers:
- mtl : ห้องสมุดหม้อแปลง Monad
- หม้อแปลง : คอนกรีต functor และ monad transformers
- monads-fd : คลาส Monad โดยใช้การพึ่งพาการทำงาน
- monads-tf : คลาส Monad โดยใช้ประเภทครอบครัว
- monadLib : ชุดของหม้อแปลง monad
- mtl-tf : ไลบรารีหม้อแปลง Monad โดยใช้ตระกูลประเภท
- mmtl : ไลบรารีหม้อแปลง Modular Monad
- mtlx : ไลบรารีหม้อแปลง Monad พร้อมดัชนีประเภทให้สำเนา 'ฟรี'
- compose-trans : หม้อแปลง monad ที่ประกอบได้
(และบางทีฉันก็พลาดไปบ้าง)
เราจะใช้อันไหนดี?
mtl เป็นหนึ่งในแพลตฟอร์ม Haskell แต่ฉันเคยได้ยินเกี่ยวกับ reddit ว่ามัน uncool
แต่สิ่งที่ไม่ดีเกี่ยวกับการเลือกมันไม่ใช่แค่สิ่งที่ดีเหรอ
ฉันได้เห็นตัวอย่างเช่นผู้เขียนผู้เข้าถึงข้อมูลต้องทำสิ่งเหล่านี้เพื่อตอบสนองตัวเลือกยอดนิยม:
- data-accessor-monadLib library: ฟังก์ชัน Accessor สำหรับ monads ของ monadLib
- data-accessor-monads-fd library: ใช้ Accessor เพื่อเข้าถึงสถานะในคลาส monad ของ monads-fd State
- ไลบรารี data-accessor-monads-tf: ใช้ Accessor เพื่อเข้าถึงสถานะในตระกูล monad type monads-tf State
- data-accessor-mtl library: ใช้ Accessor เพื่อเข้าถึง state ใน mtl State monad class
- ไลบรารี data-accessor-transformers: ใช้ Accessor เพื่อเข้าถึงสถานะใน transformers State monad
ฉันจินตนาการว่าถ้าสิ่งนี้เกิดขึ้นและตัวอย่างเช่นแพ็คเกจ Arrow ที่แข่งขันกันพัฒนาขึ้นเราอาจเห็นบางอย่างเช่น: spoonklink-arrows-transformers, spoonklink-arrows-monadLib, spoonklink-tfArrows-transformers, spoonklink-tfArrows-monadLib, ...
จากนั้นฉันก็กังวลว่าหาก Spoonklink ถูกส้อมการแฮ็กจะทำให้พื้นที่ดิสก์หมด :)
คำถาม:
- เหตุใดจึงมีแพ็คเกจหม้อแปลง Monad มากมาย?
- เหตุใด mtl จึง [ถือว่า] uncool?
- อะไรคือความแตกต่างที่สำคัญ?
- แพ็คเกจที่ดูเหมือนจะแข่งขันกันเหล่านี้ส่วนใหญ่เขียนโดย Andy Gill และดูแลโดย Ross Paterson หมายความว่าแพ็กเกจเหล่านี้ไม่ได้แข่งขันกัน แต่ทำงานร่วมกันไม่ทางใดก็ทางหนึ่ง? Andy และ Ross คิดว่าแพ็คเกจของตัวเองล้าสมัยหรือไม่?
- คุณและฉันควรใช้อันไหน?