<?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: Elegant memoization with functional memo tries</title>
	<atom:link href="http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries</link>
	<description>Inspirations &#38; experiments, mainly about denotative/functional programming in Haskell</description>
	<lastBuildDate>Sat, 18 May 2013 00:33:37 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	<item>
		<title>By: Audun</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-113441</link>
		<dc:creator>Audun</dc:creator>
		<pubDate>Tue, 29 May 2012 11:12:47 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-113441</guid>
		<description>&lt;p&gt;Thank you for adding the instance, and for the attribution :)&lt;/p&gt;

&lt;p&gt;If you make another release, you can add my full name: Audun Skaugen (no hurry, though).&lt;/p&gt;

&lt;p&gt;Oh, and sorry for the code formatting in the previous comment; that&#039;s what you get for not previewing.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Thank you for adding the instance, and for the attribution <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>If you make another release, you can add my full name: Audun Skaugen (no hurry, though).</p>

<p>Oh, and sorry for the code formatting in the previous comment; that&#8217;s what you get for not previewing.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-109124</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Sun, 06 May 2012 23:12:04 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-109124</guid>
		<description>&lt;p&gt;Hi Audun. I like your idea of a &lt;code&gt;HasTrie Void&lt;/code&gt; instance. Omitting it was an oversight. I just added your instance and released &lt;a href=&quot;http://hackage.haskell.org/package/MemoTrie-0.4.12&quot; rel=&quot;nofollow&quot;&gt;version 0.4.12&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I think you meant &quot;there is one function &lt;code&gt;Void -&gt; a&lt;/code&gt;&quot; (rather than none), ignoring bottoms, namely the empty function.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hi Audun. I like your idea of a <code>HasTrie Void</code> instance. Omitting it was an oversight. I just added your instance and released <a href="http://hackage.haskell.org/package/MemoTrie-0.4.12" rel="nofollow">version 0.4.12</a>.</p>

<p>I think you meant &#8220;there is one function <code>Void -&gt; a</code>&#8221; (rather than none), ignoring bottoms, namely the empty function.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Audun</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-107190</link>
		<dc:creator>Audun</dc:creator>
		<pubDate>Sat, 21 Apr 2012 19:26:45 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-107190</guid>
		<description>&lt;p&gt;Hi,
I had use for a HasTrie instance for the Void type. I could think of two instances. The instance that would seem to follow from the isomorphisms is:&lt;/p&gt;

&lt;p&gt;instance HasTrie Void where
  data Void :-&gt;: a = VoidTrie
  trie _ = VoidTrie
  untrie VoidTrie = absurd
  enumerate VoidTrie = []&lt;/p&gt;

&lt;p&gt;That is, there are no functions Void -&gt; a, and a^Void is isomorphic to Unit. However, this instance makes constant functions strict, so that
memo (const a) undefined == undefined.
This can be alleviated with an instance closer to the Unit instance.&lt;/p&gt;

&lt;p&gt;Any thoughts? Would you be willing to add a Void instance to MemoTrie?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hi,
I had use for a HasTrie instance for the Void type. I could think of two instances. The instance that would seem to follow from the isomorphisms is:</p>

<p>instance HasTrie Void where
  data Void :-&gt;: a = VoidTrie
  trie _ = VoidTrie
  untrie VoidTrie = absurd
  enumerate VoidTrie = []</p>

<p>That is, there are no functions Void -&gt; a, and a^Void is isomorphic to Unit. However, this instance makes constant functions strict, so that
memo (const a) undefined == undefined.
This can be alleviated with an instance closer to the Unit instance.</p>

<p>Any thoughts? Would you be willing to add a Void instance to MemoTrie?</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Memoizing polymorphic functions via unmemoization</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-59067</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Memoizing polymorphic functions via unmemoization</dc:creator>
		<pubDate>Sat, 02 Oct 2010 15:40:49 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-59067</guid>
		<description>&lt;p&gt;[...] can work out an answer by appealing to the same laws of exponents used in memoization, but now applied in reverse (to create function types instead of eliminate [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] can work out an answer by appealing to the same laws of exponents used in memoization, but now applied in reverse (to create function types instead of eliminate [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Memoizing higher-order functions</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-50257</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Memoizing higher-order functions</dc:creator>
		<pubDate>Wed, 21 Jul 2010 15:41:24 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-50257</guid>
		<description>&lt;p&gt;[...] all at once from a denotational perspective, and incrementally from an operational perspective. See Elegant memoization with functional memo tries and Elegant memoization with higher-order [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] all at once from a denotational perspective, and incrementally from an operational perspective. See Elegant memoization with functional memo tries and Elegant memoization with higher-order [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Elegant memoization with higher-order types</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-50187</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Elegant memoization with higher-order types</dc:creator>
		<pubDate>Wed, 21 Jul 2010 04:48:29 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-50187</guid>
		<description>&lt;p&gt;[...] using the essential idea of Ralf Hinze&#8217;s paper Generalizing Generalized Tries. The blog post Elegant memoization with functional memo tries describes a library, MemoTrie, based on both of these sources, and using associated data types. I [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] using the essential idea of Ralf Hinze&#8217;s paper Generalizing Generalized Tries. The blog post Elegant memoization with functional memo tries describes a library, MemoTrie, based on both of these sources, and using associated data types. I [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Nonstrict memoization</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-49242</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Nonstrict memoization</dc:creator>
		<pubDate>Wed, 14 Jul 2010 02:46:28 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-49242</guid>
		<description>&lt;p&gt;[...] written a few posts about functional memoization. In one of them, Luke Palmer commented that the memoization methods are correct only for strict functions, which I [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] written a few posts about functional memoization. In one of them, Luke Palmer commented that the memoization methods are correct only for strict functions, which I [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Memoizing polymorphic functions - part two</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-32215</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Memoizing polymorphic functions - part two</dc:creator>
		<pubDate>Fri, 20 Nov 2009 19:33:26 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-32215</guid>
		<description>&lt;p&gt;[...] Comments conal on Elegant memoization with functional memo triesShawn Willden on Elegant memoization with functional memo triesDave Crossland on Seeking advice on [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Comments conal on Elegant memoization with functional memo triesShawn Willden on Elegant memoization with functional memo triesDave Crossland on Seeking advice on [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-31832</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Sat, 14 Nov 2009 19:22:02 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-31832</guid>
		<description>&lt;p&gt;@Shawn -- Fixed now.  Thanks for the note.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@Shawn &#8212; Fixed now.  Thanks for the note.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Shawn Willden</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-31813</link>
		<dc:creator>Shawn Willden</dc:creator>
		<pubDate>Sat, 14 Nov 2009 07:13:13 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-31813</guid>
		<description>&lt;p&gt;Your source code links are broken.  Could you please fix them so I can understand what it is you&#039;re talking about?  Thanks.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Your source code links are broken.  Could you please fix them so I can understand what it is you&#8217;re talking about?  Thanks.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Memoizing polymorphic functions - part one</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-22207</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Memoizing polymorphic functions - part one</dc:creator>
		<pubDate>Thu, 11 Jun 2009 00:36:40 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-22207</guid>
		<description>&lt;p&gt;[...] reuses rather than recomputes when applied to the same argument more than once. Variations include not-quite-equivalence due to added strictness, and replacing value equality with pointer [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] reuses rather than recomputes when applied to the same argument more than once. Variations include not-quite-equivalence due to added strictness, and replacing value equality with pointer [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Simpler, more efficient, functional linear maps</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-11163</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Simpler, more efficient, functional linear maps</dc:creator>
		<pubDate>Sun, 09 Nov 2008 22:16:12 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-11163</guid>
		<description>&lt;p&gt;[...] However, there are several other ways to make linear maps, and it would be easy to forget to memoize each combining form. So, instead of the function representation above, I ensure that the function be memoized by representing it as a memo trie. [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] However, there are several other ways to make linear maps, and it would be easy to forget to memoize each combining form. So, instead of the function representation above, I ensure that the function be memoized by representing it as a memo trie. [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Vector space bases via type families</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-10304</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Vector space bases via type families</dc:creator>
		<pubDate>Mon, 20 Oct 2008 01:23:36 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-10304</guid>
		<description>&lt;p&gt;[...] rules are also essentially the same as the ones used for memo tries, but phrased in terms of logarithms instead of (explicit) exponents.    Tags: type families, vector [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] rules are also essentially the same as the ones used for memo tries, but phrased in terms of logarithms instead of (explicit) exponents.    Tags: type families, vector [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-10190</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Thu, 16 Oct 2008 23:52:47 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-10190</guid>
		<description>&lt;p&gt;I said to &lt;a href=&quot;http://luqui.org/blog&quot; rel=&quot;nofollow&quot;&gt;Luke&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
I&#039;d love to read a blog post about your library, especially where you exploit the flexibility of explicit memoizers.
&lt;/blockquote&gt;

&lt;p&gt;Oh!  Now I see that you &lt;a href=&quot;http://luqui.org/blog/archives/2008/10/14/data-memocombinators/&quot; rel=&quot;nofollow&quot;&gt;have written&lt;/a&gt;.  I&#039;d still like to see some nice examples if you get around to it.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I said to <a href="http://luqui.org/blog" rel="nofollow">Luke</a></p>

<blockquote>
I&#8217;d love to read a blog post about your library, especially where you exploit the flexibility of explicit memoizers.
</blockquote>

<p>Oh!  Now I see that you <a href="http://luqui.org/blog/archives/2008/10/14/data-memocombinators/" rel="nofollow">have written</a>.  I&#8217;d still like to see some nice examples if you get around to it.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Dave Menendez</title>
		<link>http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries/comment-page-1#comment-10187</link>
		<dc:creator>Dave Menendez</dc:creator>
		<pubDate>Thu, 16 Oct 2008 21:27:21 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=54#comment-10187</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;Any thoughts on this dilemma?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, there&#039;s not much point memoizing a constant function. Also, a strict instance for () is more consistent with the other instances.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
  <p>Any thoughts on this dilemma?</p>
</blockquote>

<p>Well, there&#8217;s not much point memoizing a constant function. Also, a strict instance for () is more consistent with the other instances.</p>]]></content:encoded>
	</item>
</channel>
</rss>
