<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 3, 2017 at 10:37 AM, Richard Eisenberg <span dir="ltr"><<a href="mailto:rae@cs.brynmawr.edu" target="_blank">rae@cs.brynmawr.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I think one of the reasons this debate continues to crop up is that there is a fundamental tension in the design of Haskell:<br>
<br>
Haskell strives to be<br>
  a) richly typed, leading to "if it compiles, it works!"<br>
  b) as general as possible, leading to wide applicability of polymorphic functions<br>
<br>
These two laudable goals work against each other. In many instances, we will have to choose between them, and different people will have different judgment calls.</blockquote><div><br></div><div>This is an interesting assertion; I don't believe that these goals work against one another at all. In fact, I find that (b) leads to "if it compiles, it works" much more often than not. John De Goes goes into depth on this principle here: <a href="http://degoes.net/articles/insufficiently-polymorphic">http://degoes.net/articles/insufficiently-polymorphic</a> where he points out "Monomorphic code is much more likely to be incorrect than polymorphic code, because for every type signature, there are many more possible implementations.".</div></div></div></div>