<?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: Merging partial values</title>
	<atom:link href="http://conal.net/blog/posts/merging-partial-values/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog/posts/merging-partial-values</link>
	<description>Inspirations &#38; experiments, mainly about denotative/functional programming in Haskell</description>
	<lastBuildDate>Sat, 26 Sep 2020 21:06:12 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.17</generator>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Lazier functional programming, part 1</title>
		<link>http://conal.net/blog/posts/merging-partial-values#comment-212</link>
		<dc:creator><![CDATA[Conal Elliott &#187; Blog Archive &#187; Lazier functional programming, part 1]]></dc:creator>
		<pubDate>Mon, 13 Sep 2010 22:23:31 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=62#comment-212</guid>
		<description><![CDATA[&lt;p&gt;[...] In a strict language, where there are only two boolean values, these two clauses have a straightforward reading. (The reading is less straightforward when patterns overlap, as mentioned in Lazier function definitions by merging partial values.) In a non-strict language like Haskell, there are three distinct boolean values, not two. Besides True and False, Bool also has a value ⊥, pronounced &#8220;bottom&#8221; for being at the bottom of the information ordering. For an illustration and explanation of information ordering, see Merging partial values. [...]&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] In a strict language, where there are only two boolean values, these two clauses have a straightforward reading. (The reading is less straightforward when patterns overlap, as mentioned in Lazier function definitions by merging partial values.) In a non-strict language like Haskell, there are three distinct boolean values, not two. Besides True and False, Bool also has a value ⊥, pronounced &#8220;bottom&#8221; for being at the bottom of the information ordering. For an illustration and explanation of information ordering, see Merging partial values. [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Nonstrict memoization</title>
		<link>http://conal.net/blog/posts/merging-partial-values#comment-210</link>
		<dc:creator><![CDATA[Conal Elliott &#187; Blog Archive &#187; Nonstrict memoization]]></dc:creator>
		<pubDate>Wed, 14 Jul 2010 02:47:34 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=62#comment-210</guid>
		<description><![CDATA[&lt;p&gt;[...] &#8220;⊑&#8221; means has less (or equal) information content, as explained in Merging partial values. In other words, if you tell f more about an argument, it will tell you more about the result, [...]&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] &#8220;⊑&#8221; means has less (or equal) information content, as explained in Merging partial values. In other words, if you tell f more about an argument, it will tell you more about the result, [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/merging-partial-values#comment-209</link>
		<dc:creator><![CDATA[conal]]></dc:creator>
		<pubDate>Mon, 12 Jul 2010 04:14:16 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=62#comment-209</guid>
		<description><![CDATA[&lt;p&gt;Hi Luke.  Thanks for another insightful comment.&lt;/p&gt;

&lt;p&gt;Your use of &lt;code&gt;unamb&lt;/code&gt; in defining &lt;code&gt;if&#039;&lt;/code&gt; does not meet the required precondition (of information-compatible arguments).  From a conversation on #haskell, I know you&#039;ve come up with a really beautiful correct definition.  I&#039;d love to see you post the correct version for all to admire.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>Hi Luke.  Thanks for another insightful comment.</p>

<p>Your use of <code>unamb</code> in defining <code>if'</code> does not meet the required precondition (of information-compatible arguments).  From a conversation on #haskell, I know you&#8217;ve come up with a really beautiful correct definition.  I&#8217;d love to see you post the correct version for all to admire.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Exact numeric integration</title>
		<link>http://conal.net/blog/posts/merging-partial-values#comment-208</link>
		<dc:creator><![CDATA[Conal Elliott &#187; Blog Archive &#187; Exact numeric integration]]></dc:creator>
		<pubDate>Mon, 28 Dec 2009 18:25:53 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=62#comment-208</guid>
		<description><![CDATA[&lt;p&gt;[...] is perfect for the job because its meaning is exactly to combine two pieces of information. See Merging partial values and Lazier function definitions by merging partial [...]&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] is perfect for the job because its meaning is exactly to combine two pieces of information. See Merging partial values and Lazier function definitions by merging partial [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Another angle on functional future values</title>
		<link>http://conal.net/blog/posts/merging-partial-values#comment-207</link>
		<dc:creator><![CDATA[Conal Elliott &#187; Blog Archive &#187; Another angle on functional future values]]></dc:creator>
		<pubDate>Mon, 05 Jan 2009 05:49:34 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=62#comment-207</guid>
		<description><![CDATA[&lt;p&gt;[...] It took me several days of doodling, pacing outside, and talking to myself before the idea for unamb broke through. Like many of my favorite ideas, it&#8217;s simple and obvious in retrospect: to remove the ambiguity of nondeterministic choice (as in the amb operator), restrict its use to values that are equal when non-bottom. Whenever we have two different methods of answering the same question (or possibly failing), we can use unamb to try them both. Failures (errors or non-termination) are no problem in this context. A more powerful variation on unamb is the least upper bound operator lub, as described in Merging partial values. [...]&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] It took me several days of doodling, pacing outside, and talking to myself before the idea for unamb broke through. Like many of my favorite ideas, it&#8217;s simple and obvious in retrospect: to remove the ambiguity of nondeterministic choice (as in the amb operator), restrict its use to values that are equal when non-bottom. Whenever we have two different methods of answering the same question (or possibly failing), we can use unamb to try them both. Failures (errors or non-termination) are no problem in this context. A more powerful variation on unamb is the least upper bound operator lub, as described in Merging partial values. [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Luke Palmer</title>
		<link>http://conal.net/blog/posts/merging-partial-values#comment-206</link>
		<dc:creator><![CDATA[Luke Palmer]]></dc:creator>
		<pubDate>Sat, 22 Nov 2008 09:42:09 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=62#comment-206</guid>
		<description><![CDATA[&lt;p&gt;I played with almost exactly the same thing quite a while ago.  I always felt that this should work in Haskell:&lt;/p&gt;

&lt;pre&gt;
if _&#124;_ then [1..] else [1..] = [1..]
&lt;/pre&gt;

&lt;p&gt;Semantically, I wanted if with these properties:&lt;/p&gt;

&lt;pre&gt;
if True  then a else b = a
if False then a else b = b
if _&#124;_   then a else b = a `lub` b
&lt;/pre&gt;

&lt;p&gt;So I made a Lub class just like this and implemented it:&lt;/p&gt;

&lt;pre&gt;
if&#039; :: Bool -&gt; a -&gt; a -&gt; a
if&#039; c x y = (if c then x else y) `lub` x `lub` y
&lt;/pre&gt;

&lt;p&gt;Which was pretty cool.  Unfortunately on my motivating example, it did work, but it crawled like a snail; using 100% cpu and outputting about 2 elements per second.&lt;/p&gt;

&lt;p&gt;I wonder if there is some runtime support that would make this speedier.&lt;/p&gt;

&lt;p&gt;And I cannot get your alleged markdown support to work...&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>I played with almost exactly the same thing quite a while ago.  I always felt that this should work in Haskell:</p>

<pre>
if _|_ then [1..] else [1..] = [1..]
</pre>

<p>Semantically, I wanted if with these properties:</p>

<pre>
if True  then a else b = a
if False then a else b = b
if _|_   then a else b = a `lub` b
</pre>

<p>So I made a Lub class just like this and implemented it:</p>

<pre>
if' :: Bool -&gt; a -&gt; a -&gt; a
if' c x y = (if c then x else y) `lub` x `lub` y
</pre>

<p>Which was pretty cool.  Unfortunately on my motivating example, it did work, but it crawled like a snail; using 100% cpu and outputting about 2 elements per second.</p>

<p>I wonder if there is some runtime support that would make this speedier.</p>

<p>And I cannot get your alleged markdown support to work&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
