marco-oweber at gmx.de
Thu Sep 18 08:31:14 EDT 2008
On Wed, Sep 17, 2008 at 09:54:13PM -0700, Ryan Ingram wrote:
> Better is this:
> data MalformedAddressException = MalformedAddressException String
> deriving (Show, Typeable)
> throwDynIO x = throwIO (DynException $ toDyn x)
You are right.
Anyway the DynException will not be needed in the future because you can
throw arbitrary types directly.. But if you change the code the type
checker won't fail, you'll keep catching the old user error while the
new dyn type is beeing thrown. That's the mess.
The only thing to do is whenever you start using inet_addr implement an
HUnit test to ensure it still throws a user exception.. That's the only
reliable way to get notified if the behaviour changes..
But the strength of haskell is that we don't have to write tests for
everything because the type checker will do most work for us..
Another solution would be telling the compiler that the exception beeing
caught must be thrown within this thread... But that's not possible with
the new SomeException either.
So my result is that Exceptions should not be used here (?) or there
should be an alternative function..
Is that feasable to have to functions so that you can choose?
Java would have recignized if the exception type changes from user error
to dyn type. Haskell can't :-(
More information about the Haskell-Cafe