
Hello. I'm trying to add monad stack into network-conduit, and everything works except some details [1]. I've run runReaderT $ runTCPServer (wrapper around runResourceT) and inside conduit I want to run writer to gather results of inner computation. In inner computation I want to use IO, data from outter stack (ReaderT) so I'm running {-1-}: (k,t) <- lift $ runWriterT $ ask >>= \x -> tell [x] {- 1 -} and {-2-} (k,t) <- lift $ runWriterT $ do {- 2 -} x <- ask liftIO $ print $x+1 tell [x] and that will work (except I've thought I should not lift runWriterT, but calling functions inside. And finally in computation that will run once I want to register cleaning function (for example register $ putStrLn "cleaned") ({-3-}) (k,t) <- lift $ runWriterT $ do {- 3 -} x <- ask liftIO $ print $x+1 register $ print "freed2" tell [x] but I've got type error. If I'm running register outside runWriterT everything will work. I would apperated if there will be any suggestions how to make this code better or use register in internal computation (runWriterT) [1] https://gist.github.com/1941151 -- Best regards, Alexander V Vershilov