[Haskell-cafe] Use unsafePerformIO to catch Exception?

Jake McArthur jake.mcarthur at gmail.com
Wed Mar 25 02:24:06 EDT 2009


Donn Cave wrote:
> Could you elaborate a little, in what sense are we (?) relying on it?
> 
> I actually can't find any responses that make a case against it on a
> really practical level - I mean, it seems to be taken for granted that
> it will work as intended, and we're down to whether we ought to have
> such intentions, as a matter of principle.  If you've identified a
> problem here with semantics that would break normal evaluation, from
> the perspective of the programmer's intention, then this would be
> the first practical reason?

Off the top of my head, here is a possible case:

     foo :: Int -> Int
     foo x = ... -- something that might throw an exception

     bar :: Int -> Blah
     bar x = ... -- internally use foo and catch the exception

     baz :: Int -> Blah
     baz = bar . foo

In this case, if the foo in baz throws an exception, I think bar may 
catch it and attempt to handle it as if the foo in bar had thrown it, 
but we probably would have expected this exception to go all the way to 
the top level and halt the program since exceptions are usually due to 
programmer error.

But I didn't test this, and since this isn't something I've ever done 
before I can't be 100% sure of its behavior.

- Jake


More information about the Haskell-Cafe mailing list