<div dir="ltr">On Fri, Aug 12, 2011 at 19:08, Brandon Allbery <span dir="ltr">&lt;<a href="mailto:allbery.b@gmail.com">allbery.b@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Fri, Aug 12, 2011 at 18:52, Patrick Browne <span dir="ltr">&lt;<a href="mailto:patrick.browne@dit.ie" target="_blank">patrick.browne@dit.ie</a>&gt;</span> wrote:<br></div><div class="gmail_quote"><div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Why does the Haskell :type command only sometimes print the type-class?<br>
</blockquote><div><br></div></div><div>Haskell infers the most specific type applicable.  If the most specific it can get is a typeclass, that&#39;s what it produces; if it can infer an explicit type, it will.</div><div class="im">
<div></div></div></div></blockquote></div><br>By the way, a possible source of confusion here is the combination of the monomorphism restriction and defaulting, especially GHCi&#39;s extended defaulting.  The monomorphism restriction says that if you don&#39;t provide a way to *easily* infer a type for a binding (in practice this means there are no parameters), Haskell insists that the binding is not polymorphic unless you explicitly provide a type signature. Defaulting is how it accomplishes this:  there is a list of default types that can be applied when a concrete type is required and none is available, and the first one that typechecks is used.  The Haskell standard specifies Double and Integer as default types; GHCI&#39;s extended defaulting (or GHC in general with -XExtendedDefaultRules) adds () aka &quot;unit&quot;.  So, for example, something that you might expect to be (Num a =&gt; a) may end up being Integer due to the monomorphism restriction requiring a concrete type and defaulting supplying one.<div>
<br></div><div>(There&#39;s a widely expressed sentiment that the monomorphism restriction should go away because the confusion it engenders is worse than the problems it solves; on the other hand, GHC recently added a new application of it (monomorphic pattern bindings).  In any case, if you want to play around with types in GHCi, you may want to &quot;:set -XNoMonomorphismRestriction -XNoMonoPatBinds&quot; so you can see how types actually behave in the wild.)<br clear="all">
<br>-- <br>brandon s allbery                                      <a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a><br>wandering unix systems administrator (available)     (412) 475-9364 vm/sms<br>
<br>
</div></div>