Haskell ListT,LogicT和ChoiceT之间的区别

时间:2013-01-02 16:06:43

标签: haskell monad-transformers

这三个monad变压器有什么区别?

1 个答案:

答案 0 :(得分:20)

嗯,首先ListT不是真正的monad变换器。它违反了某些潜在的单子的相关性定律。它也很慢,一般来说列表的monadic接口也是如此。它建立在内部的实际列表中。

LogicT可能是列表式monad变换器的最佳选择。它不仅实现了一个合适的monad变换器,而且还为 fair 列表产品提供了一些非常有用的组合器。

ChoiceT是我自己的作品。它基本上只是LogicT的CPSed版本,受{em} monadLib 的LogicTChoiceT启发。它非常快,通常表现优异(非变换)列表,但类型可能很吓人,你可能会受到结果类型的限制,这有时可能会以你的方式出现。

结论:如果您是认真的,请使用LogicT