[Haskell-cafe] using IO monad in Iteratee

Ertugrul Soeylemez es at ertes.de
Sun Apr 3 03:06:59 CEST 2011


Bas van Dijk <v.dijk.bas at gmail.com> wrote:

> On 1 April 2011 21:59, Dmitry Olshansky <olshanskydr at gmail.com> wrote:
> > Is it possible to change enumFile to using MonadIO class?
>
> No because it uses the control operation Control.Exception.finally ::
> IO a -> IO b -> IO a internally. You can't lift control operations
> with liftIO :: MonadIO m => IO a -> m a.
>
> However if you are able to define a MonadTransControl and
> MonadControlIO instance (from the monad-control package[1]) for
> Iteratee and use Control.Exception.Control.finally instead of the
> regular finally, you can use your MyMonad with the modified enumFile.

I don't think that's possible, because Iteratee is based on CPS.  I
think, so far nobody has come up with an instance definition for
monad-peel or monad-control for CPS-based monads like ContT or Iteratee.

However, it is easy to write an own handle enumerator, which uses
monad-peel or monad-control exception handling to convert errors to
iteratee exceptions.  On the other hand, as has been noted, there is
enumHandle, which does that by itself.


Greets,
Ertugrul


-- 
nightmare = unsafePerformIO (getWrongWife >>= sex)
http://ertes.de/





More information about the Haskell-Cafe mailing list