Hackage имеет несколько пакетов для преобразователей монады:
(и возможно я скучал по некоторым),
Какой мы будем использовать?
mtl является тем в Платформе Haskell, но я продолжаю слышать на reddit, что это некруто.
Но то, что плохо о выборе так или иначе, не является им просто хорошая вещь?
Ну, я видел, как, например, авторы средства доступа данных должны были сделать все ими для угождения просто популярному выбору:
Я предполагаю, что, если это продолжается и например несколько конкурирующих пакетов Стрелки развиваются, мы могли бы видеть что-то как: spoonklink-arrows-transformers, spoonklink-arrows-monadLib, spoonklink-tfArrows-transformers, spoonklink-tfArrows-monadLib...
И затем я волнуюсь, что, если spoonklink разветвлен, в Hackage закончится дисковое пространство.:)
Вопросы:
Некоторые из них почти полностью эквивалентны:
mtl
использует расширения GHC, но преобразователи
- это Haskell 98. monads-fd
и monads-tf
- это надстройки к преобразователям
, использующие функциональные зависимости и семейства типов соответственно, обе из которых обеспечивают функциональность в mtl
, который отсутствует в трансформаторах
. mtl-tf
- это mtl
, переопределенный с использованием семейств типов. По сути, mtl
== трансформаторы
++ monads-fd
, mtl-tf
== трансформаторы
++ монады-tf
. Я думаю, что улучшенная переносимость и модульность трансформаторов
и связанных с ними пакетов является причиной того, что mtl
в наши дни не является крутым.
mmtl
и mtlx
кажутся похожими и / или основанными на mtl
, с различиями API и дополнительными функциями.
MonadLib
, кажется, имеет несколько иной подход к этому вопросу, но я не знаком с ним напрямую. Также, похоже, использует много расширений GHC, больше, чем другие.
На первый взгляд compose-trans
больше похож на метапрограммирование для создания преобразователей монад. Он утверждает, что совместим с Control.Monad.Trans
, что ... я полагаю, означает mtl
?
В любом случае, я бы предложил следующий алгоритм решения:
трансформаторы
и т. Д., Помогите нам уложить mtl
в покой. mtl
в большом проекте? трансформаторы
не полностью совместимы, но никто не убьет вас за то, что вы не переключитесь. дополнительные категории
и решите все мировые проблемы с помощью полторы страницы На данный момент? Вероятно, вам следует использовать mtl
. Происходит то, что библиотека преобразователей
выводится из MTL таким образом, что monads-fd
и monads-tf
могут мирно сосуществовать, но, наконец, проверьте, что этого еще не произошло.
Когда это произойдет, вы сможете импортировать monads-fd
и преобразователи
и получить (почти) тот же интерфейс, за исключением того, что State
и т.д. будет псевдонимом для StateT
.
Я бы написал mtl
, но не полагался бы на тот факт, что State, Reader и т. Д. В настоящее время являются данными
, поскольку они будут заменены на тип
с.
MonadLib
- еще одна альтернатива, над которой работал Iavor, которую можно безопасно использовать, поскольку она не разделяет имена модулей с другими, но имеет совершенно другой шаблон использования.