Разница между Haskell ListT, LogicT и ChoiceT - программирование

Разница между Haskell ListT, LogicT и ChoiceT

В чем разница между этими тремя монадными трансформаторами?

4b9b3361

Ответ 1

Ну, в первую очередь ListT не является истинным монадным трансформатором. Он не подчиняется закону ассоциативности для определенных лежащих в основе монадов. Это также довольно медленно, как и монадический интерфейс для списков в целом. Он встроен в фактические списки внутри.

LogicT, вероятно, лучший выбор для перечислимых монадных трансформаторов. Он не только реализует правильный трансформатор монады, но и некоторые очень полезные комбинации для продуктов с честным списком.

ChoiceT - моя собственная работа. Это просто версия CPSed LogicT и вдохновлена ​​как LogicT, так и ChoiceT на monadLib. Это очень быстрый, часто превосходящий (не преобразованный) список, но типы могут быть страшными, и вы привязаны к типу результата, который иногда может быть на вашем пути.

Заключение: если вы серьезно, используйте LogicT.