[Haskell-cafe] throwDyn typing "fun"

Tomasz Zielonka tomasz.zielonka at gmail.com
Fri Nov 11 07:35:41 EST 2005


On Fri, Nov 11, 2005 at 01:20:05PM +0200, Einar Karttunen wrote:
> It seems that the type of throwDyn and throwDynTo are dangerously close.
> ThrowDyn works in with any of the arguments of throwDynTo, which can
> cause evil situations.
> 
> throwDyn :: Typeable exception => exception -> b
> 
> Which means e.g. "throwDyn someThreadId SomeException" will work 
> when you wanted to say "throwDynTo someThreadId SomeException"
> and they both have types which unify with IO ().

How evil! ;-)

> I think using a
> class Typeable => DynamicException a where ...
> and throwDyn :: DynamicException a => a -> b
> could make more sense.

You could also do something like:

    newtype Exn a = Exn a -- not Typeable

    throwDyn' :: Typeable exception => Exn exception -> b
    throwDyn' (Exn e) = throwDyn e

used as

    throwDyn' (Exn (some-typeably-thingy))

then neither (throwDyn' someThreadId SomeException) nor
(throwDyn' someThreadId (Exn SomeException)) will compile.

And you won't have to create instances of DynamicException, but it is
probably more ugly.

Best regards
Tomasz


More information about the Haskell-Cafe mailing list