我想将ResourceT
与ReaderT
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 }
性能/正确性会更好吗?将ResourceT
与WriterT
或其他monad一起堆叠的一般准则是什么?
答案 0 :(得分:1)
就正确性而言,它们都同样正确 - 请参阅@ J.Abrahamson和@Michael Snoyman的评论。
性能可能取决于使用情况,特别是它会改变跨越该特定层的提升次数,这应该是主要的性能差异。我认为大多数公平的基准测试几乎没有差别。对于整个程序性能,分析是最重要的。