Readline read_history and write_history addition
Yitzchak Gale
gale at sefer.org
Tue Jan 22 18:49:34 EST 2008
Ian Lynagh wrote:
> People using MonadIO can convert this into the variant that doesn't
> throw an exception by replacing
> readlineFunction args
> with something like
> (try $ readlineFunction args) >> return ()
That's in the IO monad, so not always available.
Here's an example:
In a library, you have a function that starts up an
external system, runs a calculation, then shuts
down the external system. Like this:
bracketSystem :: MonadIO m => m a -> m a
bracketSystem x = do
startUpSystem
ret <- x
shutDownSystem
return ret
Now you would really like to wrap that in bracket
to make sure that "shutDownSystem" is called even
when an IO exception is thrown. But unfortunately,
bracket is currently not available for MonadIO,
nor is there any way to emulate it AFIK.
(This is a "maybe" for HaskellPrime:
http://hackage.haskell.org/trac/haskell-prime/ticket/110)
So the best you can do is make sure not to do anything
inside "x" that is likely to throw an IO exception. That
way, you'll only be left with zombies and other mess when
the hard disk fills up, or other rare and serious conditions.
If we start throwing IO exceptions for common and minor
occurrences like no readline history available, libraries like
this become impossible to write in Haskell. And code
that has already been written becomes unusable.
Thanks,
Yitz
More information about the Libraries
mailing list