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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With