堆叠ResourceT monad变换器

时间:2014-03-18 01:42:21

标签: haskell monad-transformers

我想将ResourceTReaderT monad叠加。看来我有两个选择: 将ReaderT放在堆栈的底部或顶部。

data MyEnv

newtype MyT1 m a = MyT1 { unT1 :: ResourceT (ReaderT MyEnv m) a }

newtype MyT2 m a = MyT2 { unT2 :: ReaderT MyEnv (ResourceT m) a }

性能/正确性会更好吗?将ResourceTWriterT或其他monad一起堆叠的一般准则是什么?

1 个答案:

答案 0 :(得分:1)

就正确性而言,它们都同样正确 - 请参阅@ J.Abrahamson和@Michael Snoyman的评论。

性能可能取决于使用情况,特别是它会改变跨越该特定层的提升次数,这应该是主要的性能差异。我认为大多数公平的基准测试几乎没有差别。对于整个程序性能,分析是最重要的。