【发布时间】:2014-03-18 01:42:21
【问题描述】:
我想将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 堆叠在一起的一般准则是什么?
【问题讨论】:
-
有趣的是,
ResourceT本身只是一个专门的ReaderTmonad——所有有趣的东西都在提升的 IO 操作中执行。我没有把它放在板凳上,但我的猜测是两个堆栈都同样快。此外,读者通勤(通过flip),所以两个堆栈在语义上应该是相同的。 -
@J.Abrahamson 的 cmets 看起来是我的正确答案。
标签: haskell monad-transformers