В 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 [считается] не крутым?
- В чем основные отличия?
- Большинство из этих, казалось бы, конкурирующих пакетов были написаны Энди Гиллом и поддерживаются Россом Патерсоном. Означает ли это, что эти пакеты не конкурируют, а работают как-то вместе? И считают ли Энди и Росс какие-либо из своих пакетов устаревшими?
- Какой из них мы с вами должны использовать?