我想将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堆叠的一般准则是什么? 最佳答案
就正确性而言,它们都同样正确-参见@ J.Abrahamson和@Michael Snoyman的评论。
性能可能取决于使用情况,尤其是它将改变通过该特定层进行提升的调用数量,这应该是主要的性能差异。我以为大多数公平的基准将显示出几乎没有差异。对于整个程序性能而言,性能分析是至高无上的。