[Haskell-cafe] need help with monad transformers

Dmitry Olshansky olshanskydr at gmail.com
Fri Mar 2 05:31:35 CET 2012


Did you try to use transformers instead of mtl? I am just in doubt about it
in my work.

I've found that Conduit use it. So you remove extra dependency.
I hope that transformers have more readable messages (without FD) and you
can control what is "lift" more clear.

I have no experience although.



2012/3/2 Alexander V Vershilov <alexander.vershilov at gmail.com>

> I've found a solution, I should not use lift for runWriterT, and should
> explicilty lift all computation of level I need, i.e. (lift.lift) for ask
> and lift for register.
>
> Thu, Mar 01, 2012 at 02:19:29PM +0400, Dmitry Olshansky wrote
> > >> If I'm running register outside runWriterT everything will work.
> >
> > Maybe just
> >
> > > lift $ register $ print "freed2"
> >
> > or I didn't catch something?
> >
> >
> >
> > 2012/3/1 Alexander V Vershilov <alexander.vershilov at gmail.com>
> >
> >     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
> >
> >     _______________________________________________
> >     Haskell-Cafe mailing list
> >     Haskell-Cafe at haskell.org
> >     http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
> >
> >
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120302/9b716872/attachment.htm>


More information about the Haskell-Cafe mailing list