[Haskell-cafe] Problem with a sample from RWH

Ivan Lazar Miljenovic ivan.miljenovic at gmail.com
Thu Sep 30 01:28:34 EDT 2010


On 30 September 2010 15:23, C K Kashyap <ckkashyap at gmail.com> wrote:
> Hi,
> I was going over the Error Handling chapter in RWH and tried out this sample -
>
> Prelude> :m Control.Exception
> Prelude Control.Exception> let x=5 `div` 0
> Prelude Control.Exception> let y=5 `div` 1
> Prelude Control.Exception> handle (\_ -> putStrLn "Text") (print x)
>
> <interactive>:1:0:
>    Ambiguous type variable `e' in the constraint:
>      `Exception e'
>        arising from a use of `handle' at <interactive>:1:0-39
>    Probable fix: add a type signature that fixes these type variable(s)
> Prelude Control.Exception>
>
> Could someone please tell me what the problem is and how to resolve it?

RWH was written before GHC 6.10 came out, and thus is using old-style
exceptions.  As of GHC 6.10.1 with base-4, the old-style exceptions
were replaced with extensible exceptions.  As such, you have two
options:

* Keep using old-style exceptions.  With GHC 6.10 and 6.12, import
Control.OldException instead of Control.Exception
* Manually migrate the RWH code to new-style exceptions; there are two
ways of doing this:
  - For production code, you should add explicit type signatures, etc.
for your exception-handling functions passed to handle, etc.
  - For just playing around, use SomeException: e.g.: handle (\
SomeException{} -> putStrLn "Text") (print x)

-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com


More information about the Haskell-Cafe mailing list