В Hackage есть несколько пакетов для преобразователей монад:
- mtl : библиотека преобразователей монад
- трансформаторы : Конкретный функтор и монадные трансформаторы
- monads-fd : классы монад, использующие функциональные зависимости
- monads-tf : классы монад, использующие семейства типов
- monadLib : Коллекция преобразователей монад.
- mtl-tf : библиотека преобразователей монад, использующая семейства типов.
- mmtl : Модульная библиотека преобразователей Monad
- mtlx : библиотека преобразователей монад с указателями типов, предоставляющая «бесплатные» копии.
- compose-trans : Составные преобразователи монад
(а может я что-то пропустил)
Какой из них использовать?
mtl - это тот, что есть на платформе Haskell, но я постоянно слышу на Reddit, что это не круто.
Но что в любом случае плохого в выборе, разве это не хорошо?
Что ж, я видел, как, например, авторам средства доступа к данным пришлось сделать все это, чтобы удовлетворить только популярные варианты:
- библиотека data-accessor-monadLib: функции доступа для монад monadLib
- Библиотека data-accessor-monads-fd: используйте Accessor для доступа к состоянию в monads-fd Класс монады состояния
- Библиотека data-accessor-monads-tf: используйте Accessor для доступа к состоянию в monads-tf Семейство типов монад состояний
- библиотека data-accessor-mtl: используйте Accessor для доступа к состоянию в классе монады состояния mtl
- библиотека data-accessor-transformers: используйте Accessor для доступа к состоянию в преобразователях State monad
Я предполагаю, что если это будет продолжаться и, например, появятся несколько конкурирующих пакетов Arrow, мы можем увидеть что-то вроде: Spoklink-стрелки-трансформеры, Spoklink-стрелки-monadLib, Spoklink-tfArrows-transformers, Spokeklink-tfArrows-monadLib, ...
И потом я беспокоюсь, что если ложка будет разветвлена, у Hackage закончится место на диске. :)
Вопросы:
- Почему так много пакетов трансформаторов монад?
- Почему mtl [считается] не крутым?
- В чем основные отличия?
- Большинство этих, казалось бы, конкурирующих пакетов были написаны Энди Гиллом и поддерживаются Россом Патерсоном. Означает ли это, что эти пакеты не конкурируют, а скорее работают вместе? И считают ли Энди и Росс какие-либо из своих пакетов устаревшими?
- Какой из них следует использовать нам с вами?