Hackage має кілька пакетів для монадних трансформаторів:
- mtl : Бібліотека трансформаторів монад
- трансформатори : Бетонні функторні та монадні трансформатори
- monads-fd : Класи монад , що використовують функціональні залежності
- monads-tf : Класи монад з використанням сімейств типів
- monadLib : колекція монадних трансформаторів.
- mtl-tf : Бібліотека трансформаторів Monad з використанням сімейств типів.
- mmtl : Бібліотека модульних трансформаторів Monad
- mtlx : Бібліотека трансформаторів Monad з індексами типів, що надає "безкоштовні" копії.
- compose-trans : Складаються монадні трансформатори
(і, можливо, я щось пропустив)
Який із них ми використаємо?
mtl - це платформа Haskell, але я постійно чую на reddit, що це не круто.
Але що все-таки погано у виборі, чи не просто це добре?
Ну, я бачив, як, наприклад, автори програми доступу до даних повинні були зробити все це, щоб задовольнити лише популярний вибір:
- data-accessor-monadLib бібліотека: функції доступу для монад monadLib
- data-accessor-monads-fd бібліотека: Використовуйте Accessor для доступу до стану в класі монад monads-fd State
- data-accessor-monads-tf бібліотека: Використовуйте Accessor для доступу до стану у сімействі типів монад monads-tf State
- data-accessor-mtl бібліотека: Використовуйте Accessor для доступу до стану в класі монади mtl State
- data-accessor-transformers library: Використовуйте Accessor для доступу до стану в монаді стану трансформаторів
Я думаю, що якщо це триватиме і, наприклад, кілька конкуруючих пакетів Arrow розвинуться, ми можемо побачити щось на зразок: spoonklink-arrows-transformers, spoonklink-arrows-monadLib, spoonklink-tfArrows-transformers, spoonklink-tfArrows-monadLib, ...
І тоді я переживаю, що якщо spoonklink роздвоїться, у Hackage закінчиться дисковий простір. :)
Запитання:
- Чому так багато пакетів монадних трансформаторів?
- Чому mtl [вважається] нехолодним?
- Які ключові відмінності?
- Більшість із цих, здавалося б, конкуруючих пакетів були написані Енді Гіллом і підтримуються Россом Патерсоном. Чи означає це, що ці пакети не конкурують, а певним чином працюють разом? І чи вважають Енді та Росс якісь власні пакунки застарілими?
- Який з них ми з вами повинні використовувати?