В чем разница между этими тремя монадными трансформаторами?
Разница между Haskell ListT, LogicT и ChoiceT
Ответ 1
Ну, в первую очередь ListT
не является истинным монадным трансформатором. Он не подчиняется закону ассоциативности для определенных лежащих в основе монадов. Это также довольно медленно, как и монадический интерфейс для списков в целом. Он встроен в фактические списки внутри.
LogicT
, вероятно, лучший выбор для перечислимых монадных трансформаторов. Он не только реализует правильный трансформатор монады, но и некоторые очень полезные комбинации для продуктов с честным списком.
ChoiceT
- моя собственная работа. Это просто версия CPSed LogicT
и вдохновлена как LogicT
, так и ChoiceT
на monadLib. Это очень быстрый, часто превосходящий (не преобразованный) список, но типы могут быть страшными, и вы привязаны к типу результата, который иногда может быть на вашем пути.
Заключение: если вы серьезно, используйте LogicT
.