[Haskell-beginners] Ambiguous type variable
markus.l2ll at gmail.com
Thu Aug 17 13:25:43 UTC 2017
You only catch some specific type of exception, everything else is simply
past onwards. See end of p. 2/beginning of p. 3 here:
On Thu, Aug 17, 2017 at 2:24 PM, Jonathon Delgado <voldermort at hotmail.com>
> 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
> > - 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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners