小智 21

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

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

ChoiceT是我自己的工作.它基本上是一个CPSed版本LogicT,由两个启发LogicTChoiceTmonadLib.它非常快,通常表现优异(非变换)列表,但类型可能很吓人,你可能会遇到结果类型,有时可能会以你的方式.

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

  • @Tinctorius:无论如何,`LogicT`和`ChoiceT`都将列表编码为某种折叠,并且像往常一样"运行"函数只是打开它.折叠已经类似于CPS列表,并且`ChoiceT`在其上添加了额外的适当CPS层,这就是为什么它只有母亲可以喜欢的类型签名.] (4认同)
  • 您介意更详细地描述这个“正确的 CPS”或提供参考吗?我最初认为logictt基本上已经是ListT的cpd版本了,做得对 (2认同)