
On 08 April 2006 10:18, John Meacham wrote:
On Sat, Apr 08, 2006 at 12:11:51AM -0400, David Menendez wrote:
newtype ArithException a = ArithException a
data DivideByZero
throw (ArithException DivideByZero)
your code:
data MultiplyByZero throw (ArithException MultiplyByZero)
How would you use this to write a handler that captures any ArithException?
You would use the Typeable1 class in Data.Typeable. not perfect, but exception hierarchies shouldn't be too deep so it is not so bad.
I mentioned this solution to John G. off-list; the problem is that you end up needing to parameterise all the classes of exceptions (we'd have IOException a, ArrayException a, AsyncException a, etc.). Given that we've already made the Exception type sideways extensible with a simple application of type classes and dynamic types, we can take the technique a bit further to create an extensible hierarchy of exceptions, which is what John wants. To create a new subclass of exceptions:
participants (1)
-
Simon Marlow