Pergunta

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?

Foi útil?

Solução

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top