[Haskell-cafe] need help with monad transformers
Alexander V Vershilov
alexander.vershilov at gmail.com
Thu Mar 1 14:31:38 CET 2012
It will not work due:
gistfile1.hs:29:36:
Could not deduce (m ~ ResourceT m0)
from the context (Base m ~ IO,
MonadReader SInit m,
MonadIO m,
IsSource src,
Resource m)
bound by the type signature for
app :: (Base m ~ IO,
MonadReader SInit m,
MonadIO m,
IsSource src,
Resource m) =>
src m a1 -> Sink a1 m b -> ResourceT m b
at gistfile1.hs:(29,1)-(59,27)
`m' is a rigid type variable bound by
the type signature for
app :: (Base m ~ IO,
MonadReader SInit m,
MonadIO m,
IsSource src,
Resource m) =>
src m a1 -> Sink a1 m b -> ResourceT m b
at gistfile1.hs:29:1
Expected type: Conduit a1 m a1
Actual type: Conduit a1 (ResourceT m0) a1
In the second argument of `(=$=)', namely `process2'
In the second argument of `($=)', namely `(process1 =$= process2)'
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
>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: Digital signature
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120301/f9bfd1ea/attachment.pgp>
More information about the Haskell-Cafe
mailing list