<?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"
	>
<channel>
	<title>Comments on: A poke at the essence of functional programming</title>
	<atom:link href="http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/</link>
	<description>The weblog of Tony Morris</description>
	<pubDate>Sat, 19 May 2012 02:27:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38966</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Sat, 27 Mar 2010 11:17:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38966</guid>
		<description>Andrey, there are no mainstream languages that do not already have them, almost exclusively.</description>
		<content:encoded><![CDATA[<p>Andrey, there are no mainstream languages that do not already have them, almost exclusively.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrey Vityuk</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38960</link>
		<dc:creator>Andrey Vityuk</dc:creator>
		<pubDate>Sat, 27 Mar 2010 09:02:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38960</guid>
		<description>Cool idea. Agree, in most cases you need only referentially transparent functions. 
And even if somebody will argue, that it's not acceptable to have only them in mainstream languages, some sort of "procecure" semantic could be added.</description>
		<content:encoded><![CDATA[<p>Cool idea. Agree, in most cases you need only referentially transparent functions.<br />
And even if somebody will argue, that it&#8217;s not acceptable to have only them in mainstream languages, some sort of &#8220;procecure&#8221; semantic could be added.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38911</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Fri, 26 Mar 2010 11:33:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38911</guid>
		<description>Hello oelewapperke,
What you have said is false. You can write to the screen in that language and you can also update the database. More generally, you certainly can update external state. The "house of cards" certainly does not fall down. After some realisation, pretty soon you're no longer using impractical languages such as Java, which incidentally, is specified with 50 operators that are all pure as are all compiler-aware functions.

You might want to look at pure functional languages. Specifically, those that are turing-complete, since this will invalidate your claim. To give even more strength to this fact, observe that the pure lambda calculus is turing-complete. I recommend some reading by Wadler, Moggi or Hughes to get you started.

Woops indeed :)</description>
		<content:encoded><![CDATA[<p>Hello oelewapperke,<br />
What you have said is false. You can write to the screen in that language and you can also update the database. More generally, you certainly can update external state. The &#8220;house of cards&#8221; certainly does not fall down. After some realisation, pretty soon you&#8217;re no longer using impractical languages such as Java, which incidentally, is specified with 50 operators that are all pure as are all compiler-aware functions.</p>
<p>You might want to look at pure functional languages. Specifically, those that are turing-complete, since this will invalidate your claim. To give even more strength to this fact, observe that the pure lambda calculus is turing-complete. I recommend some reading by Wadler, Moggi or Hughes to get you started.</p>
<p>Woops indeed <img src='http://blog.tmorris.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: oelewapperke</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38910</link>
		<dc:creator>oelewapperke</dc:creator>
		<pubDate>Fri, 26 Mar 2010 10:35:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38910</guid>
		<description>All functions are referentially transparent ... sounds cool. It does have a few problems though :

you can't write to the screen in that language
you can't update a database in that language 
more general, you cannot EVER update any external state

So the whole house of cards falls down. You allow updates to the screen, violating the functional language spec. You allow database updates somehow, again violating the language.

And there is always the next thing that doesn't work in a functional way. Whoops. Pretty soon you're back at java, and referentially transparent functions are exceptions.

To stop people whining one implements the "const" keyword in the language, which, admittedly, does allow for some nice optimizations you couldn't otherwise do (although there is more than enough work to allow for automatic recognition of constness, I must admit that enforcing constness is a nice feature to have)

Of course, then your language is "too complex". Heh.</description>
		<content:encoded><![CDATA[<p>All functions are referentially transparent &#8230; sounds cool. It does have a few problems though :</p>
<p>you can&#8217;t write to the screen in that language<br />
you can&#8217;t update a database in that language<br />
more general, you cannot EVER update any external state</p>
<p>So the whole house of cards falls down. You allow updates to the screen, violating the functional language spec. You allow database updates somehow, again violating the language.</p>
<p>And there is always the next thing that doesn&#8217;t work in a functional way. Whoops. Pretty soon you&#8217;re back at java, and referentially transparent functions are exceptions.</p>
<p>To stop people whining one implements the &#8220;const&#8221; keyword in the language, which, admittedly, does allow for some nice optimizations you couldn&#8217;t otherwise do (although there is more than enough work to allow for automatic recognition of constness, I must admit that enforcing constness is a nice feature to have)</p>
<p>Of course, then your language is &#8220;too complex&#8221;. Heh.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jared G.</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38871</link>
		<dc:creator>Jared G.</dc:creator>
		<pubDate>Thu, 25 Mar 2010 14:53:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38871</guid>
		<description>Heh. I said the order would be indeterminate, but I didn't know the spec mandated that the leftmost method be called first.

Apparently I already understood the methods to be referentially transparent. If they weren't, then I would have to be more careful about how to call them. I.e., if the second method call were to have an effect on one the objects involved in the first method call, I would hope the programmer knew about such a possibility and took steps to make the order explicit. E.g., by separating the method calls out into individual statements.

Not very good if you want to avoid being verbose, but nice if you want your code to be self-documenting and if you want to be crystal clear about what you're attempting to do.

By enforcing referential transparency, I suppose you accomplish just that. Not bad. :-)</description>
		<content:encoded><![CDATA[<p>Heh. I said the order would be indeterminate, but I didn&#8217;t know the spec mandated that the leftmost method be called first.</p>
<p>Apparently I already understood the methods to be referentially transparent. If they weren&#8217;t, then I would have to be more careful about how to call them. I.e., if the second method call were to have an effect on one the objects involved in the first method call, I would hope the programmer knew about such a possibility and took steps to make the order explicit. E.g., by separating the method calls out into individual statements.</p>
<p>Not very good if you want to avoid being verbose, but nice if you want your code to be self-documenting and if you want to be crystal clear about what you&#8217;re attempting to do.</p>
<p>By enforcing referential transparency, I suppose you accomplish just that. Not bad. <img src='http://blog.tmorris.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Betteridge</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38864</link>
		<dc:creator>Andy Betteridge</dc:creator>
		<pubDate>Thu, 25 Mar 2010 10:05:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38864</guid>
		<description>lol, excellent article, well done. that's a great explanation!</description>
		<content:encoded><![CDATA[<p>lol, excellent article, well done. that&#8217;s a great explanation!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mario Peshev</title>
		<link>http://blog.tmorris.net/a-poke-at-the-essence-of-functional-programming/#comment-38862</link>
		<dc:creator>Mario Peshev</dc:creator>
		<pubDate>Thu, 25 Mar 2010 08:47:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/?p=709#comment-38862</guid>
		<description>Well as the new trends advice using a noSQL databases like CouchDB and MongoDB, that's the reason to go back to functional programming as well. As they use to say, every new trend is a forgotten old one. 

Don't forget the hybrid languages such as Groovy. At some point we might return to Assembler or some other older code standard just based on the spiral way of thinking.</description>
		<content:encoded><![CDATA[<p>Well as the new trends advice using a noSQL databases like CouchDB and MongoDB, that&#8217;s the reason to go back to functional programming as well. As they use to say, every new trend is a forgotten old one. </p>
<p>Don&#8217;t forget the hybrid languages such as Groovy. At some point we might return to Assembler or some other older code standard just based on the spiral way of thinking.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

