<div dir="ltr">So does this mean that the reason for complexity of generics is the Java inheritance?<br><br>BTW, in addition to the article I posted, This site: <a href="http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html">http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html</a>&nbsp;&nbsp; has a FAQ on Java generics that is 500+ pages long! &nbsp;&nbsp;&nbsp; In Haskell you have parametrized types but I don&#39;t think you need 500+ page faq to explain it.&nbsp; <br>
<br>daryoush<br><br><div class="gmail_quote">On Thu, Oct 16, 2008 at 12:27 PM, Jonathan Cast <span dir="ltr">&lt;<a href="mailto:jonathanccast@fastmail.fm">jonathanccast@fastmail.fm</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">On Thu, 2008-10-16 at 12:27 -0700, Robert Greayer wrote:<br>
&gt; --- On Thu, 10/16/08, Jonathan Cast &lt;<a href="mailto:jonathanccast@fastmail.fm">jonathanccast@fastmail.fm</a>&gt; wrote:<br>
&gt; &gt; So if I say<br>
&gt; &gt;<br>
&gt; &gt; void wrong(List&lt;?&gt; foo, List&lt;?&gt; bar)<br>
&gt; &gt;<br>
&gt; &gt; I get two /different/ type variables implicitly filled in?<br>
&gt; &gt;<br>
&gt; &gt; If I declare a generic class, and then have a method, is<br>
&gt; &gt; there a way, in<br>
&gt; &gt; that method&#39;s parameter list, to say `the type<br>
&gt; &gt; parameter that was<br>
&gt; &gt; supplied when my class was instantiated&#39;?<br>
&gt; &gt;<br>
&gt;<br>
&gt; Yes -<br>
&gt; class Foo&lt;T&gt; {<br>
&gt; &nbsp; &nbsp;...<br>
&gt; &nbsp; &nbsp;void right(List&lt;T&gt; foo, List&lt;T&gt; bar) {<br>
&gt; &nbsp; &nbsp; &nbsp; foo.add(bar.get(0));<br>
&gt; &nbsp; &nbsp;}<br>
&gt;<br>
&gt; Can also do it at the method level...<br>
&gt;<br>
&gt; &nbsp; &nbsp; void &lt;T&gt; alsoRight(List&lt;T&gt; foo, List&lt;T&gt; bar) { ... }<br>
&gt;<br>
&gt; &gt; Yikes. &nbsp;So, in this instance, the difference between<br>
&gt; &gt; Haskell and Java<br>
&gt; &gt; is: if you want to disallow that call to wrong, in Haskell<br>
&gt; &gt; you can...<br>
&gt; &gt;<br>
&gt;<br>
&gt; Not exactly... Java disallows &#39;wrong&#39; from being written (without<br>
&gt; class casts and such), because it disallows calling a method which has<br>
&gt; a wildcard type in a contravariant position. &nbsp;IIRC, Scala handles all<br>
&gt; this more elegantly. &nbsp;If you stay away from &#39;?&#39;, and stick to type<br>
&gt; variables with Java generics, though, how type checking with generics<br>
&gt; works in Java should be mostly unsurprising to a Haskeller.<br>
<br>
</div></div>Oh, good.<br>
<br>
Daryoush Mehrtash:<br>
<br>
It looks like the answer to your original question --- gotchas with Java<br>
generics vs. Haskell polymorphism --- is that the `gotchas&#39; you linked<br>
to are consequent on using ? in your code, instead of true type<br>
variables. &nbsp;So the truly problematic construct is ?, and the difference<br>
is just that Haskell doesn&#39;t have an analogue to it.<br>
<br>
jcc<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br><br clear="all"><br>
</div>