我想把ResourceT
和ReaderT
单曲叠加起来。我似乎有两个选择:要么将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
或其他单子堆叠的一般准则是什么?
发布于 2014-07-04 18:51:03
就正确性而言,它们都是同样正确的--参见@J.Abrahamson和@Michael的评论。
性能可能取决于使用,特别是它将改变跨越特定层的调用数,这应该是主要的性能差异。我可以想象,大多数公平的基准会显示出很少或根本没有区别。对于整个程序的性能,剖析是王者。
https://stackoverflow.com/questions/22468881
复制相似问题