<?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: The C language is purely functional</title>
	<atom:link href="http://conal.net/blog/posts/the-c-language-is-purely-functional/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog/posts/the-c-language-is-purely-functional</link>
	<description>Inspirations &#38; experiments, mainly about denotative/functional programming in Haskell</description>
	<lastBuildDate>Thu, 02 May 2013 14:19:32 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	<item>
		<title>By: “The C language is purely functional” &#171; Nicholas Wilson</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-44707</link>
		<dc:creator>“The C language is purely functional” &#171; Nicholas Wilson</dc:creator>
		<pubDate>Tue, 27 Apr 2010 19:38:23 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-44707</guid>
		<description>&lt;p&gt;[...] with an interest in computing theory, functional linguistics, or computational logic needs to read this. Perhaps it was famous and I had not found it before, but it is [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] with an interest in computing theory, functional linguistics, or computational logic needs to read this. Perhaps it was famous and I had not found it before, but it is [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Norman Ramsey</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-40899</link>
		<dc:creator>Norman Ramsey</dc:creator>
		<pubDate>Sun, 07 Mar 2010 19:26:34 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-40899</guid>
		<description>&lt;p&gt;As Simon PJ said in an invited talk in 2003, Haskell is the world&#039;s finest imperative language...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>As Simon PJ said in an invited talk in 2003, Haskell is the world&#8217;s finest imperative language&#8230;</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raoul Duke</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-37638</link>
		<dc:creator>Raoul Duke</dc:creator>
		<pubDate>Sat, 06 Feb 2010 00:12:17 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-37638</guid>
		<description>&lt;p&gt;Conal, where would I read up more on how we&#039;d get rid of the imperative stuff entirely, and go with purely functional, and still have terminal interaction? I&#039;m not yet sure what to use for a google search to find out :-) Thank you.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Conal, where would I read up more on how we&#8217;d get rid of the imperative stuff entirely, and go with purely functional, and still have terminal interaction? I&#8217;m not yet sure what to use for a google search to find out <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Thank you.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Is Haskell a purely functional language?</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-35308</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Is Haskell a purely functional language?</dc:creator>
		<pubDate>Tue, 05 Jan 2010 23:08:36 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-35308</guid>
		<description>&lt;p&gt;[...] There is a lot of confusion about the meaning of &#8220;functional&#8221; and &#8220;declarative&#8221; as descriptions of programming languages and paradigms. For instance, Haskell is sometimes advertised as a &#8220;purely functional programming language&#8221; and other times as &#8220;the world&#8217;s finest imperative programming language&#8221;. I added some playful confusion (and clarity, I hope) with my post The C language is purely functional. [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] There is a lot of confusion about the meaning of &#8220;functional&#8221; and &#8220;declarative&#8221; as descriptions of programming languages and paradigms. For instance, Haskell is sometimes advertised as a &#8220;purely functional programming language&#8221; and other times as &#8220;the world&#8217;s finest imperative programming language&#8221;. I added some playful confusion (and clarity, I hope) with my post The C language is purely functional. [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Conal Elliott &#187; Blog Archive &#187; Can functional programming be liberated from the von Neumann paradigm?</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-35285</link>
		<dc:creator>Conal Elliott &#187; Blog Archive &#187; Can functional programming be liberated from the von Neumann paradigm?</dc:creator>
		<pubDate>Tue, 05 Jan 2010 18:34:03 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-35285</guid>
		<description>&lt;p&gt;[...] functional programming language&#8221;, and in a technical sense it is. (In good company, too; see The C language is purely functional.) However, as commonly practiced, imperative computation (IO) still plays a significant role in [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] functional programming language&#8221;, and in a technical sense it is. (In good company, too; see The C language is purely functional.) However, as commonly practiced, imperative computation (IO) still plays a significant role in [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: C is functional, Erlang and Scala are not? &#171; fnpl</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-22044</link>
		<dc:creator>C is functional, Erlang and Scala are not? &#171; fnpl</dc:creator>
		<pubDate>Thu, 04 Jun 2009 15:47:42 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-22044</guid>
		<description>&lt;p&gt;[...] that can be browsed beginning at Conal Elliott&#8217;s brilliant and hilarious post explaining how The C language is purely functional. (You can follow the links to other parts of the discussion after you stop [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] that can be browsed beginning at Conal Elliott&#8217;s brilliant and hilarious post explaining how The C language is purely functional. (You can follow the links to other parts of the discussion after you stop [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Helltime for June 1 &#171; I Built His Cage</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21901</link>
		<dc:creator>Helltime for June 1 &#171; I Built His Cage</dc:creator>
		<pubDate>Mon, 01 Jun 2009 22:49:23 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21901</guid>
		<description>&lt;p&gt;[...] Conal Elliott hilariously writes how C is a purely-functional language. Definitely worth the read. When you come back here, remember that, just like in Smalltalk [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Conal Elliott hilariously writes how C is a purely-functional language. Definitely worth the read. When you come back here, remember that, just like in Smalltalk [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: The Real Adam &#8211; Shippin&#8217; ain&#8217;t&#160;easy</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21743</link>
		<dc:creator>The Real Adam &#8211; Shippin&#8217; ain&#8217;t&#160;easy</dc:creator>
		<pubDate>Sat, 30 May 2009 03:53:28 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21743</guid>
		<description>&lt;p&gt;[...] because you can: living frugally, JavaScript pixel art and hand-built microprocessors. Also, C as a functional language is nicer to think about than I&#8217;d first thought. If you ever get bored, check out the C output [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] because you can: living frugally, JavaScript pixel art and hand-built microprocessors. Also, C as a functional language is nicer to think about than I&rsquo;d first thought. If you ever get bored, check out the C output [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Cale</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21230</link>
		<dc:creator>Cale</dc:creator>
		<pubDate>Fri, 22 May 2009 03:23:59 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21230</guid>
		<description>&lt;p&gt;Eyal Lotem: For what it&#039;s worth, I&#039;m pretty sure you could implement continuations in lisp in a way roughly equivalent to the way we do it in Haskell, by defining the appropriate return, bind, and callCC. They&#039;re just ordinary functions. You could also implement a macro for do-notation. However, doing it in such a way that the benefit of recognising it as a monad becomes apparent without making the notation completely inconvenient to use is a bigger trick. The benefit of recognising it as a monad in Haskell comes from the fact that all the functions which are polymorphic and work in all monads come for free as a result. Lisp doesn&#039;t have the equivalent of typeclasses -- it&#039;s usually not even statically typechecked -- so the kind of polymorphism needed is a bit cumbersome to express. (You need to do something like passing implementations of return and bind around as parameters. It&#039;s possible that macros could alleviate some of that pain.)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Eyal Lotem: For what it&#8217;s worth, I&#8217;m pretty sure you could implement continuations in lisp in a way roughly equivalent to the way we do it in Haskell, by defining the appropriate return, bind, and callCC. They&#8217;re just ordinary functions. You could also implement a macro for do-notation. However, doing it in such a way that the benefit of recognising it as a monad becomes apparent without making the notation completely inconvenient to use is a bigger trick. The benefit of recognising it as a monad in Haskell comes from the fact that all the functions which are polymorphic and work in all monads come for free as a result. Lisp doesn&#8217;t have the equivalent of typeclasses &#8212; it&#8217;s usually not even statically typechecked &#8212; so the kind of polymorphism needed is a bit cumbersome to express. (You need to do something like passing implementations of return and bind around as parameters. It&#8217;s possible that macros could alleviate some of that pain.)</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Eyal Lotem</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21226</link>
		<dc:creator>Eyal Lotem</dc:creator>
		<pubDate>Fri, 22 May 2009 02:54:15 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21226</guid>
		<description>&lt;p&gt;Interesting perspective!&lt;/p&gt;

&lt;p&gt;I think people like to celebrate Haskell&#039;s power in the pure side of things, and its ability to combine imperative programs in powerful ways, and like to call it &quot;pure functionality&quot; when it is in fact something else.&lt;/p&gt;

&lt;p&gt;I totally sympathize with the excitement about Haskell&#039;s ability to redefine the semantics of return and (&gt;&gt;=) and thus change/enhance the semantics of the language a program is written in (and not at the syntactic level, as Lisp does, but the semantic level, which I see as far more powerful. AFAIK you cannot implement continuations as a lisp macro).&lt;/p&gt;

&lt;p&gt;This ability allows defining things like continuations, exceptions, global environments, etc to be added to the language as libraries, and can be mixed and matched into existing code without breaking it (Assuming it uses the proper abstractions).&lt;/p&gt;

&lt;p&gt;Instead of calling this &quot;purely functional&quot;, we should figure out a name that conveys the true meaning:&lt;/p&gt;

&lt;p&gt;A) Powerful (turing-complete), expressive (Haskell&#039;s niceness as a language) and interlaced (IO actions are allowed to depend on the purely functional side&#039;s results, and vice versa) handling of IO actions as first-class values&lt;/p&gt;

&lt;p&gt;B) Ability to enhance the language: defining new loops, continuations, and stuff other languages are made of, are just libraries in Haskell.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Interesting perspective!</p>

<p>I think people like to celebrate Haskell&#8217;s power in the pure side of things, and its ability to combine imperative programs in powerful ways, and like to call it &#8220;pure functionality&#8221; when it is in fact something else.</p>

<p>I totally sympathize with the excitement about Haskell&#8217;s ability to redefine the semantics of return and (&gt;&gt;=) and thus change/enhance the semantics of the language a program is written in (and not at the syntactic level, as Lisp does, but the semantic level, which I see as far more powerful. AFAIK you cannot implement continuations as a lisp macro).</p>

<p>This ability allows defining things like continuations, exceptions, global environments, etc to be added to the language as libraries, and can be mixed and matched into existing code without breaking it (Assuming it uses the proper abstractions).</p>

<p>Instead of calling this &#8220;purely functional&#8221;, we should figure out a name that conveys the true meaning:</p>

<p>A) Powerful (turing-complete), expressive (Haskell&#8217;s niceness as a language) and interlaced (IO actions are allowed to depend on the purely functional side&#8217;s results, and vice versa) handling of IO actions as first-class values</p>

<p>B) Ability to enhance the language: defining new loops, continuations, and stuff other languages are made of, are just libraries in Haskell.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Isaac Dupree</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21225</link>
		<dc:creator>Isaac Dupree</dc:creator>
		<pubDate>Fri, 22 May 2009 02:52:13 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21225</guid>
		<description>&lt;p&gt;Haskell can be distinguished by how many of its modules/libraries/files are &quot;completely useless&quot;, incapable of doing any IO whatsoever when you look at all the types of the functions they export!  In cpp+C, perhaps only the Boost Preprocessor Library deserves this honor.  (In the more usual analogy where C is the language, there are some fairly-&quot;useless&quot; C libraries: you can tell once you look at their full implementations: but they&#039;re not as common, nor as often revered, as the multitudes of do-nothing libraries in Haskell are! :-)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Haskell can be distinguished by how many of its modules/libraries/files are &#8220;completely useless&#8221;, incapable of doing any IO whatsoever when you look at all the types of the functions they export!  In cpp+C, perhaps only the Boost Preprocessor Library deserves this honor.  (In the more usual analogy where C is the language, there are some fairly-&#8221;useless&#8221; C libraries: you can tell once you look at their full implementations: but they&#8217;re not as common, nor as often revered, as the multitudes of do-nothing libraries in Haskell are! <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>]]></content:encoded>
	</item>
	<item>
		<title>By: sclv</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21145</link>
		<dc:creator>sclv</dc:creator>
		<pubDate>Thu, 21 May 2009 00:22:54 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21145</guid>
		<description>&lt;p&gt;Ah, I didn&#039;t quite understand your description of cpp before... I had imagined it as something closer to, e.g. Lennart&#039;s cmonad in haskell, rather than getting the point about monoids. Now it becomes clear. Nonetheless, I think the point about how easy it is to write imperative Haskell with no IO is also worth considering.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Ah, I didn&#8217;t quite understand your description of cpp before&#8230; I had imagined it as something closer to, e.g. Lennart&#8217;s cmonad in haskell, rather than getting the point about monoids. Now it becomes clear. Nonetheless, I think the point about how easy it is to write imperative Haskell with no IO is also worth considering.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21140</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Wed, 20 May 2009 22:37:18 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21140</guid>
		<description>&lt;p&gt;Thanks, Ryan!&lt;/p&gt;

&lt;p&gt;The (imagined) C/Kleene connection had never occurred to me until a moment before I typed those words.
Now that it has, I can&#039;t help but wonder.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Thanks, Ryan!</p>

<p>The (imagined) C/Kleene connection had never occurred to me until a moment before I typed those words.
Now that it has, I can&#8217;t help but wonder.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21138</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Wed, 20 May 2009 22:33:46 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21138</guid>
		<description>&lt;p&gt;Thanks, Matt.
As for &quot;non-sequitur&quot;, &quot;should&quot;, and &quot;best&quot;: particular hot buttons of mine.
Hence my reaction.
Some explanation at
&lt;em&gt;&lt;a href=&quot;http://conal.net/blog/posts/fostering-creativity-by-relinquishing-the-obvious/&quot; rel=&quot;nofollow&quot;&gt;Fostering creativity by relinquishing the obvious&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for the encouraging comments.  Regards,  - Conal&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Thanks, Matt.
As for &#8220;non-sequitur&#8221;, &#8220;should&#8221;, and &#8220;best&#8221;: particular hot buttons of mine.
Hence my reaction.
Some explanation at
<em><a href="http://conal.net/blog/posts/fostering-creativity-by-relinquishing-the-obvious/" rel="nofollow">Fostering creativity by relinquishing the obvious</a></em>.</p>

<p>Thanks for the encouraging comments.  Regards,  &#8211; Conal</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan Ingram</title>
		<link>http://conal.net/blog/posts/the-c-language-is-purely-functional/comment-page-1#comment-21136</link>
		<dc:creator>Ryan Ingram</dc:creator>
		<pubDate>Wed, 20 May 2009 22:16:05 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=87#comment-21136</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;The C ADT is implemented simply as String (or char *, for you type theorists, using a notation from Kleene )&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is an amazing bit of wordplay.  I love the misuse of &quot;char *&quot;&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
  <p>The C ADT is implemented simply as String (or char *, for you type theorists, using a notation from Kleene )</p>
</blockquote>

<p>This is an amazing bit of wordplay.  I love the misuse of &#8220;char *&#8221;</p>]]></content:encoded>
	</item>
</channel>
</rss>
