我想将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堆叠的一般准则是什么?

最佳答案

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

性能可能取决于使用情况,尤其是它将改变通过该特定层进行提升的调用数量,这应该是主要的性能差异。我以为大多数公平的基准将显示出几乎没有差异。对于整个程序性能而言,性能分析是至高无上的。

10-08 12:41