Sterling Clover wrote:
> there's no standard way that I know of besides "inspection" to
> determine if code might throw an exception, and this is particularly
> the case with the dreaded lazy IO of prelude functions.

The following old message showed even two ways of doing exactly that
-- in Haskell, with no external tools.

        Exceptions in types and exception-free programming
        http://www.haskell.org/pipermail/haskell/2004-June/014271.html

The third way described in the message -- ensuring that exceptions
will never occur -- was further developed as lightweight static
capabilities.


> And as per a recent discussion on libraries, it's still a royal pain
> to catch IO exceptions in monads with an IO base.

That is again very easy. Takusen uses a CaughtMonadIO -- which
includes a wide range of monads: IO itself and various transformations
of it. I am extensively using a variant written by Jesse Tov based on
the Takusen's idea. His code defines two classes: EMonad and EMonadIO
-- which enclose most of the interesting monads. The latter is the
subclass of the former and also allows arbitrary IO (via liftIO). In
either case, I use gthrow, gbracket, gcatch, ghandle, gfinally,
etc. -- without even thinking which Monad I'm in and how error
handling is actually implemented (via ErrorT or via IO exceptions). It
works universally for most of monads of interest.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to