[Haskell-cafe] Real World Haskell Chapter 19 and GHC 6.10

Luke Palmer lrpalmer at gmail.com
Wed Oct 21 06:36:41 EDT 2009


On Wed, Oct 21, 2009 at 3:29 AM, Michael Mossey <mpm at alumni.caltech.edu> wrote:
> The examples in the "error handling" chapter (19) of RWH don't run under GHC
> 6.10.
>
> For instance, an example might be
>
> main = handle (\_ -> putStrLn "error") (print $ 5 `div` 0)
>
> Trying to load this results in "amigous type variable 'e' in the constraint:
> 'Exception e' arising from a use of 'handle' etc etc.
>
> I was able to fix this via the ludicrously complex:
>
> main2 = (handle :: (SomeException -> IO ()) -> IO () -> IO ())
>        (\_ -> putStrLn "Error calculating result")
>        (print $ 5 `div` 0)
>
> Is there a more concise way to use "handle", or can someone point me to a
> tutorial that might explain the changes in 6.10 and in a general way how to
> get the RWH examples to run?

How about:

anyHandler :: IO () -> SomeException -> IO ()
anyHandler = const

main = handle (anyHandler (putStrLn "Error calculating result"))
(print $ 5 `div` 0)

Luke


More information about the Haskell-Cafe mailing list