質問

I'd like to stack ResourceT with the ReaderT monad. It seems I have two options: Either place ReaderT on the bottom or at the top of the stack.

data MyEnv

newtype MyT1 m a = MyT1 { unT1 :: ResourceT (ReaderT MyEnv m) a }

newtype MyT2 m a = MyT2 { unT2 :: ReaderT MyEnv (ResourceT m) a }

What would be better in sence of performance/correctness? What are the general guidelines for stacking ResourceT with WriterT or other monads?

役に立ちましたか?

解決

As far as correctness goes, they are both equally correct -- see comments by @J.Abrahamson and @Michael Snoyman.

Performance probably depends on use, in particular it will change how many calls to lift cross that particular layer, which should be the main performance difference. I'd imagine most fair benchmarks would show little to no difference. For whole program performance, profiling is king.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top