
Am Dienstag 12 Mai 2009 18:27:06 schrieb Thomas Friedrich:
Hi everyone,
I have a problem with the following example in the Real World Haskell book, which aims to develop a module for controlling different threads. See,
http://book.realworldhaskell.org/read/concurrent-and-multicore-programming. html
in the chapter "The main thread and waiting for other threads". When I run this through ghci I get the following failure:
[1 of 1] Compiling NiceFork ( NiceFork.hs, interpreted )
NiceFork.hs:17:26: Class `Exception' used as a type In the type `Exception' In the data type declaration for `ThreadStatus' Failed, modules loaded: none.
The book was written in the times of GHC 6.8.*, when Exception was a type. In GHC 6.10, it became a class because it was considered a bad idea to catch general exceptions, one should use adequate handlers for specific exceptions instead. Of course, that broke some code out there.
Any idea on how to solve this? Exception is a class not a type, so what to put there instead?
For those who want to catch general exceptions, there is data SomeException = forall e . Exception e => SomeException e in Control.Exception, which should be roughly equivalent to the old Exception type. So replace Exception with SomeException in ThreadStatus, perhaps insert a few calls to toException in the appropriate places (the compiler will help you find them) and it should work.
Cheers, Thomas
Cheers, Daniel