[Haskell-beginners] Ambiguous type variable

Markus Läll markus.l2ll at gmail.com
Thu Aug 17 13:25:43 UTC 2017


Hi Jonathon!

You only catch some specific type of exception, everything else is simply
past onwards. See end of p. 2/beginning of p. 3 here:
http://community.haskell.org/~simonmar/papers/ext-exceptions.pdf

On Thu, Aug 17, 2017 at 2:24 PM, Jonathon Delgado <voldermort at hotmail.com>
wrote:

> I'm sure it makes sense! I'm not really following though.
>
> I understood typeclasses to be analogous to OO interfaces. So if a
> variable implements the Exception interface, and Exception implements the
> Show interface, then it should automatically support show.
>
> I take it this was wrong? How does the compiler use typeclasses if they're
> not interfaces?
>
>
> Francesco Ariis  wrote:
>
> > I'm trying to use
> >   catch (...) (\e -> putStrLn $ show e)
> > However, I get an error
> >   Ambiguous type variable ‘a0’ arising from a use of ‘show’ prevents the
> constraint ‘(Show a0)’ from being solved.
> > This goes away if I change the code to
> >   catch (...) (\e -> putStrLn $ show (e::IOException))
> >
> > A couple of things I don't understand here:
> > - The signature for catch begins "Exception e", and exception it "class
> (Typeable e, Show e) => Exception e". So why isn't show automatically
> available?
> > - Why does the new code work at all? e is Exception, not IOException.
> What would happen if it caught a different Exception?
>
> IOException is a concrete type while Exception is a typeclass. In the end,
> the compiler needs the former, the latter not being enough.
>
> The code works as any other class-based function would
>
>     someFunction :: Monoid a -> [a] -> a
>     -- ^-- in the end `Monoid a` will become something concrete, like
>     -- a String, a Sum, etc.
>
> Does that make sense?
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>



-- 
Markus Läll
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20170817/cf71e1f8/attachment.html>


More information about the Beginners mailing list