<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Revisiting higher-rank impredicative polymorphism in Scala</title>
	<atom:link href="http://existentialtype.net/2008/05/26/revisiting-higher-rank-impredicative-polymorphism-in-scala/feed/" rel="self" type="application/rss+xml" />
	<link>http://existentialtype.net/2008/05/26/revisiting-higher-rank-impredicative-polymorphism-in-scala/</link>
	<description>For People Who Like Type and Types</description>
	<lastBuildDate>Sun, 24 Jan 2010 22:31:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Vincent Cremet</title>
		<link>http://existentialtype.net/2008/05/26/revisiting-higher-rank-impredicative-polymorphism-in-scala/comment-page-1/#comment-26953</link>
		<dc:creator>Vincent Cremet</dc:creator>
		<pubDate>Thu, 20 Nov 2008 14:10:18 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.net/?p=243#comment-26953</guid>
		<description>You wrote: &quot;I think Vincent Cremet was the first person to suggest this sort of encoding, and I vaguely recall reading about it on one of the Scala mailing lists, but I could not find the message after a little bit of time spent searching.&quot;

I found the message you mention (it was in the old list called &quot;scala-lounge&quot;):

http://article.gmane.org/gmane.comp.lang.scala.user/697

The idea of your encoding is the same as mine (except you use the name &quot;Univ&quot; instead of &quot;Forall&quot;). But your blog article is more complete as it also describes how to treat bounds and how to quantify over more than one type variable.</description>
		<content:encoded><![CDATA[<p>You wrote: &#8220;I think Vincent Cremet was the first person to suggest this sort of encoding, and I vaguely recall reading about it on one of the Scala mailing lists, but I could not find the message after a little bit of time spent searching.&#8221;</p>
<p>I found the message you mention (it was in the old list called &#8220;scala-lounge&#8221;):</p>
<p><a href="http://article.gmane.org/gmane.comp.lang.scala.user/697" rel="nofollow">http://article.gmane.org/gmane.comp.lang.scala.user/697</a></p>
<p>The idea of your encoding is the same as mine (except you use the name &#8220;Univ&#8221; instead of &#8220;Forall&#8221;). But your blog article is more complete as it also describes how to treat bounds and how to quantify over more than one type variable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: washburn</title>
		<link>http://existentialtype.net/2008/05/26/revisiting-higher-rank-impredicative-polymorphism-in-scala/comment-page-1/#comment-22840</link>
		<dc:creator>washburn</dc:creator>
		<pubDate>Wed, 28 May 2008 10:49:17 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.net/?p=243#comment-22840</guid>
		<description>@Matt: True. The problem had occurred to me at some point, as well as the problem that this only gives you upper bounds for the quantified types, but I didn&#039;t think of it when I wrote up the above.  The latter could be fixed as 

&lt;pre&gt;
trait Univ1[UBound1,LBound1&lt;:UBound1,Body[_]] {
   def Apply[T1&gt;:LBound1&lt;:UBound1] : Body[T1]
}
&lt;/pre&gt;

Kind polymorphism could be used to address the problem of requiring &lt;i&gt;n&lt;/i&gt; variations of &lt;code&gt;Univ1&lt;/code&gt;, but it is something that I do not think is considered critical enough that it would be implemented in the near future.  Virtual classes and dependent method types, among other things, are higher priority at the moment.</description>
		<content:encoded><![CDATA[<p>@Matt: True. The problem had occurred to me at some point, as well as the problem that this only gives you upper bounds for the quantified types, but I didn&#8217;t think of it when I wrote up the above.  The latter could be fixed as </p>
<pre>
trait Univ1[UBound1,LBound1< :UBound1,Body[_]] {
   def Apply[T1>:LBound1< :UBound1] : Body[T1]
}
</pre>
<p>Kind polymorphism could be used to address the problem of requiring <i>n</i> variations of <code>Univ1</code>, but it is something that I do not think is considered critical enough that it would be implemented in the near future.  Virtual classes and dependent method types, among other things, are higher priority at the moment.</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Hellige</title>
		<link>http://existentialtype.net/2008/05/26/revisiting-higher-rank-impredicative-polymorphism-in-scala/comment-page-1/#comment-22818</link>
		<dc:creator>Matt Hellige</dc:creator>
		<pubDate>Tue, 27 May 2008 22:16:35 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.net/?p=243#comment-22818</guid>
		<description>One thing that makes this a little more annoying than one would like is that one has to define a new Univ not just for each number of type parameters, but for each different combination of kinds as well:

trait Univ1Again[Bound1,Body[Bound1[_]]] {
  def Apply[T1[_] &lt;: Bound1] : Body[T1]
}

and so on... This makes the required family of Univs irritatingly large.

But anyway it&#039;s a very nice trick, and anonymous (and curried) type functions would make it even nicer.</description>
		<content:encoded><![CDATA[<p>One thing that makes this a little more annoying than one would like is that one has to define a new Univ not just for each number of type parameters, but for each different combination of kinds as well:</p>
<p>trait Univ1Again[Bound1,Body[Bound1[_]]] {<br />
  def Apply[T1[_] &lt;: Bound1] : Body[T1]<br />
}</p>
<p>and so on&#8230; This makes the required family of Univs irritatingly large.</p>
<p>But anyway it&#8217;s a very nice trick, and anonymous (and curried) type functions would make it even nicer.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
