<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 17, 2017 at 4:29 PM, Francesco Ariis <span dir="ltr"><<a href="mailto:fa-ml@ariis.it" target="_blank">fa-ml@ariis.it</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, Aug 17, 2017 at 12:24:07PM +0000, Jonathon Delgado wrote:<br>
> I'm sure it makes sense! I'm not really following though.<br>
><br>
> I understood typeclasses to be analogous to OO interfaces. So if a variable<br>
> implements the Exception interface, and Exception implements the Show<br>
> interface, then it should automatically support show.<br>
><br>
> I take it this was wrong? How does the compiler use typeclasses if they're<br>
> not interfaces?<br>
<br>
</span>That's correct! Indeed ghc is not complaining about a lack of<br>
instances, as it would with, say<br>
<br>
    λ> putStrLn 5<br>
    -- • No instance for (Num String) arising from etc etc.<br>
<br>
but about the *ambiguity* of type variable `e`.  How does `catch` know<br>
_which_ exception to deal with if you don't specify the concrete type?<br>
Consider:<br>
<br>
    prova = catch (print $ div (error "hey bby") 0)<br>
                  (\e -> print "ouch" >><br>
                         print (e :: ErrorCall))<br>
<br>
    -- I want to deal with arithmetic errors here and not in `prova`<br>
    palla = catch prova<br>
                  (\e -> print "baaah" >><br>
                         print (e :: ArithException))<br>
<br>
If I switch ArithException and ErrorCall the behaviour of invoking `palla`<br>
changes.<br>
<br>
Having a catch-all `catch` is possible by using (e :: SomeException);<br>
if you don't care about `e` and just want to do an action regardless, you<br>
are probably better off with `onException`.<br>
<br></blockquote><div><br></div><div>This is dangerous: `catch` with `e :: SomeException` will catch all asynchronous exceptions, breaking things like timeout, race, and the async library in general. That's why my message about mentioned the safe-exceptions package.</div><div><br></div><div>Michael<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Ask more if needed!<br>
<div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/beginners</a><br>
</div></div></blockquote></div><br></div></div>