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