<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Self-optimizing data structures: using types to make lists faster</title>
	<atom:link href="http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/feed/" rel="self" type="application/rss+xml" />
	<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/</link>
	<description>A Journal of Haskell Programming</description>
	<lastBuildDate>Mon, 03 Oct 2011 02:09:43 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: anonymous</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-250</link>
		<dc:creator><![CDATA[anonymous]]></dc:creator>
		<pubDate>Sun, 18 Oct 2009 14:13:51 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-250</guid>
		<description><![CDATA[Using tolist gives you back your pattern matching.  With a rule that eliminated fromList . toList, would Haskell be able to eliminate them from tail&#039; = fromList . tail . toList to give you the same results as you have above?  That would be the best of both worlds.]]></description>
		<content:encoded><![CDATA[<p>Using tolist gives you back your pattern matching.  With a rule that eliminated fromList . toList, would Haskell be able to eliminate them from tail&#8217; = fromList . tail . toList to give you the same results as you have above?  That would be the best of both worlds.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dons00</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-248</link>
		<dc:creator><![CDATA[dons00]]></dc:creator>
		<pubDate>Sun, 18 Oct 2009 01:55:32 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-248</guid>
		<description><![CDATA[@Antonio I think one benefit of the approach outlined in this talk is that you do get clean code. List Int really does generate a list of unboxed ints, and the code is indentical to boxed ints.]]></description>
		<content:encoded><![CDATA[<p>@Antonio I think one benefit of the approach outlined in this talk is that you do get clean code. List Int really does generate a list of unboxed ints, and the code is indentical to boxed ints.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Antonio</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-247</link>
		<dc:creator><![CDATA[Antonio]]></dc:creator>
		<pubDate>Sat, 17 Oct 2009 22:21:16 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-247</guid>
		<description><![CDATA[Generic as they are, these optimizations require more work and make the code less transparent. It sounds like only C++ has generic unboxed data structures (this is not meant to suggest that C++ is better than Haskell, otherwise I would just write in C++ and not bother with Haskell). One writes Vector[A] and that&#039;s it. Is it possible to write an unboxed compiler for Haskell? Fast by design, not by mastery, that should be the goal. Then we can focus on what the application should do, not the language.]]></description>
		<content:encoded><![CDATA[<p>Generic as they are, these optimizations require more work and make the code less transparent. It sounds like only C++ has generic unboxed data structures (this is not meant to suggest that C++ is better than Haskell, otherwise I would just write in C++ and not bother with Haskell). One writes Vector[A] and that&#8217;s it. Is it possible to write an unboxed compiler for Haskell? Fast by design, not by mastery, that should be the goal. Then we can focus on what the application should do, not the language.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ok-but</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-241</link>
		<dc:creator><![CDATA[ok-but]]></dc:creator>
		<pubDate>Tue, 13 Oct 2009 05:00:47 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-241</guid>
		<description><![CDATA[great work, but it&#039;s a shame that pattern matching is lost.  Is it feasible to deconstruct pattern matching and rewrite automatically?]]></description>
		<content:encoded><![CDATA[<p>great work, but it&#8217;s a shame that pattern matching is lost.  Is it feasible to deconstruct pattern matching and rewrite automatically?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dons00</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-239</link>
		<dc:creator><![CDATA[dons00]]></dc:creator>
		<pubDate>Mon, 12 Oct 2009 14:59:54 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-239</guid>
		<description><![CDATA[@Visscher With head and tail it was easy to rewrite pattern matches. A general list elimination form would probably work just as well.]]></description>
		<content:encoded><![CDATA[<p>@Visscher With head and tail it was easy to rewrite pattern matches. A general list elimination form would probably work just as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Heinrich Apfelmus</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-237</link>
		<dc:creator><![CDATA[Heinrich Apfelmus]]></dc:creator>
		<pubDate>Mon, 12 Oct 2009 13:52:06 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-237</guid>
		<description><![CDATA[What about type classes, like Functor and Monad?

I think it should be possible to do

&lt;pre&gt;
    instance Functor List where
        fmap f xs = if null xs then empty else
                  cons (f $ head xs) (fmap f $ tail xs)
&lt;/pre&gt;

but that would need an &lt;code&gt;AdaptList&lt;/code&gt; constraint on the data type family &lt;code&gt;List&lt;/code&gt;?]]></description>
		<content:encoded><![CDATA[<p>What about type classes, like Functor and Monad?</p>
<p>I think it should be possible to do</p>
<pre>
    instance Functor List where
        fmap f xs = if null xs then empty else
                  cons (f $ head xs) (fmap f $ tail xs)
</pre>
<p>but that would need an <code>AdaptList</code> constraint on the data type family <code>List</code>?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sjoerd Visscher</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-236</link>
		<dc:creator><![CDATA[Sjoerd Visscher]]></dc:creator>
		<pubDate>Mon, 12 Oct 2009 10:23:35 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-236</guid>
		<description><![CDATA[Is it for performance that you built the Class around the ugly head and tail eliminators? I would prefer something like this:

elimList :: b -&gt; (a -&gt; List a -&gt; b) -&gt; List a -&gt; b

Which would clean up the code a lot, but I don&#039;t know about performance.]]></description>
		<content:encoded><![CDATA[<p>Is it for performance that you built the Class around the ugly head and tail eliminators? I would prefer something like this:</p>
<p>elimList :: b -&gt; (a -&gt; List a -&gt; b) -&gt; List a -&gt; b</p>
<p>Which would clean up the code a lot, but I don&#8217;t know about performance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vyacheslav Egorov</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-235</link>
		<dc:creator><![CDATA[Vyacheslav Egorov]]></dc:creator>
		<pubDate>Mon, 12 Oct 2009 07:33:13 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-235</guid>
		<description><![CDATA[I am curious what is rationale behind the post&#039;s title. Judging from it I expected that you would present a data structure (probably accompanied with rewrite rules) that adopts/optimizes itself for different usages (sounds a little scifi-ish ;) ). 

On a side note, it seems that such &quot;strict unpacked lists&quot; of type [!a] (which is currently not valid) can be easily introduced at the compiler&#039;s level. When compiler encounters application f x (f :: [a] -&gt; b, x :: [!b]) it can just try to generate a special version of f adopted to the representation of x (unpacked elements).]]></description>
		<content:encoded><![CDATA[<p>I am curious what is rationale behind the post&#8217;s title. Judging from it I expected that you would present a data structure (probably accompanied with rewrite rules) that adopts/optimizes itself for different usages (sounds a little scifi-ish ;) ). </p>
<p>On a side note, it seems that such &#8220;strict unpacked lists&#8221; of type [!a] (which is currently not valid) can be easily introduced at the compiler&#8217;s level. When compiler encounters application f x (f :: [a] -&gt; b, x :: [!b]) it can just try to generate a special version of f adopted to the representation of x (unpacked elements).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dons00</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-234</link>
		<dc:creator><![CDATA[dons00]]></dc:creator>
		<pubDate>Mon, 12 Oct 2009 01:45:17 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-234</guid>
		<description><![CDATA[Thanks Lf and BadAxes: yes, I&#039;m using criterion, and there is a feature request against it to allow multiple benchmarks to yield graphs with the same axes. Until then, we&#039;ll just have to hang on.]]></description>
		<content:encoded><![CDATA[<p>Thanks Lf and BadAxes: yes, I&#8217;m using criterion, and there is a feature request against it to allow multiple benchmarks to yield graphs with the same axes. Until then, we&#8217;ll just have to hang on.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bad Axes</title>
		<link>http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/#comment-233</link>
		<dc:creator><![CDATA[Bad Axes]]></dc:creator>
		<pubDate>Mon, 12 Oct 2009 01:29:29 +0000</pubDate>
		<guid isPermaLink="false">http://donsbot.wordpress.com/?p=259#comment-233</guid>
		<description><![CDATA[Agreed.  There have been a few posts lately around the Haskell blogosphere that have used the same style plots (is there some plotting package that made these that people are using now?), and have had the same issue with inconsistent axes.  It&#039;s bad form to present data for comparison and use inconsistent axes.]]></description>
		<content:encoded><![CDATA[<p>Agreed.  There have been a few posts lately around the Haskell blogosphere that have used the same style plots (is there some plotting package that made these that people are using now?), and have had the same issue with inconsistent axes.  It&#8217;s bad form to present data for comparison and use inconsistent axes.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
