[Haskell-beginners] Ambiguous type variable
fa-ml at ariis.it
Thu Aug 17 08:15:18 UTC 2017
On Thu, Aug 17, 2017 at 07:55:28AM +0000, Jonathon Delgado 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?
More information about the Beginners