<br><br>
<div class="gmail_quote">2009/1/23 Brent Yorgey <span dir="ltr">&lt;<a href="mailto:byorgey@seas.upenn.edu">byorgey@seas.upenn.edu</a>&gt;</span><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">&gt;<br>&gt; AbstractInterface a = new ConcreteClass();<br><br>In Java, if a variable has type AbstractInterface, it is<br>
*existentially* quantified: it means, this variable references a value<br>of *some* type, and all you know about it is that it is an instance of<br>AbstractInterface. &nbsp;Whatever code sets the value of the variable gets<br>
to choose its concrete type; any code that uses the variable cannot<br>choose what type it should be, but can only use AbstractInterface<br>methods on it (since that&#39;s all that is known).<br><br>However, a Haskell variable with type<br>
<br>&nbsp;var :: AbstractInterface a =&gt; a<br><br>is *universally* quantified: it means, this variable has a polymorphic<br>value, which can be used as a value of any type which is an instance<br>of AbstractInterface. &nbsp;Here, it is the code which *uses* var that gets<br>
to choose its type (and indeed, different choices can be made for<br>different uses); the definition of var cannot choose, and must work<br>for any type which is an instance of AbstractInterface (hence it must<br>only use methods of the AbstractInterface type class).<br>
<br>Writing<br><br>a :: Num n =&gt; n<br>a = 3 :: Integer<br><br>is trying to define a universally quantified value as if it were<br>existentially quantified.<br><br>Now, it *is* possible to have existentially quantification in Haskell;<br>
I can show you how if you like, but I think I&#39;ll stop here for now.<br><br>Does this help?<br><font color="#888888"><br></font></blockquote>
<div>&nbsp;</div>
<div>Yes thanks.</div>
<div>From other answers, I&nbsp;also got the essence of it, but now I know the exact terminology: I met the terms</div>
<div>&#39;existentially quantification&#39; and &#39;universal quantification&#39;&nbsp; before, but did not have&nbsp;any idea of their meaning.</div>
<div>I did not now than embarking in studying haskell I had to&nbsp;study phylosophy too :-)</div>
<div>&nbsp;</div>
<div>Joking apart, I believe something like&nbsp;your explanation should be reported in tutorials helping to learn haskell, especially the</div>
<div>ones for people coming from other languages. As&nbsp;I said in my initial post the analogy &#39;type class are like interfaces&#39; is a good</div>
<div>starting point, but carried too far it&nbsp;is misleading.</div>
<div>&nbsp;</div>
<div>Thanks again to all the posters that replied to my question. This seems a lively forum: expect to see soon other questions from me :-).</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>Ciao</div>
<div>------</div>
<div>FB&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div></div>