<?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: Can functional programming be liberated from the von Neumann paradigm?</title>
	<atom:link href="http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm</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: conal</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-46027</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Fri, 21 May 2010 05:47:10 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-46027</guid>
		<description>&lt;p&gt;Kumar:&lt;/p&gt;

&lt;p&gt;Did you somehow get the impression that I have a bias against monads?  If so, how?&lt;/p&gt;

&lt;p&gt;Many of my best friends are monads (e.g. (partially applied) pairings, functions, Maybe, Future, backtracking, ...).  These friends are all denotative.  They have precise &amp; tractable meanings I can work with.  In contrast, there are non-denotative types, like IO. And while IO happens to be a Monad, it&#039;s also a Functor, Applicative, Monoid (when applied to a Monoid), and even a Num (when applied to a Num)! These classes don&#039;t hinder or help denotative-ness.&lt;/p&gt;

&lt;p&gt;My goal here is to remind people of the quest of denotative programming and hopefully inspire some curiosity and creative exploration of new denotative alternatives to Haskell&#039;s IO.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Kumar:</p>

<p>Did you somehow get the impression that I have a bias against monads?  If so, how?</p>

<p>Many of my best friends are monads (e.g. (partially applied) pairings, functions, Maybe, Future, backtracking, &#8230;).  These friends are all denotative.  They have precise &amp; tractable meanings I can work with.  In contrast, there are non-denotative types, like IO. And while IO happens to be a Monad, it&#8217;s also a Functor, Applicative, Monoid (when applied to a Monoid), and even a Num (when applied to a Num)! These classes don&#8217;t hinder or help denotative-ness.</p>

<p>My goal here is to remind people of the quest of denotative programming and hopefully inspire some curiosity and creative exploration of new denotative alternatives to Haskell&#8217;s IO.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Kumar</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-43360</link>
		<dc:creator>Kumar</dc:creator>
		<pubDate>Thu, 08 Apr 2010 16:41:14 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-43360</guid>
		<description>&lt;p&gt;... and, since I mentioned several monads, I don&#039;t think there is anything fundamentally wrong with them as long as the unsafePerformIO kinds of things are completely ruled out. In fact, it&#039;ll be great if TV encompasses monads.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>&#8230; and, since I mentioned several monads, I don&#8217;t think there is anything fundamentally wrong with them as long as the unsafePerformIO kinds of things are completely ruled out. In fact, it&#8217;ll be great if TV encompasses monads.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Kumar</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-43358</link>
		<dc:creator>Kumar</dc:creator>
		<pubDate>Thu, 08 Apr 2010 16:22:06 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-43358</guid>
		<description>&lt;p&gt;Just watched your talk. TV looks interesting indeed. The need for introspection of fusions (which one of the audience pointed out) struck me too as quite crucial to a tinkering experience. Also, the construction of a widget to visualize a value seemed to be a substantial programming activity in itself - in other words TV seems to lead to a &quot;caste&quot; of developers who focus on building visualizers. For example, building a widget for &quot;list of x&quot; - and the x can be numbers, images, functions of lists of ys, or (to artificially complicate it) &quot;Parser y&quot; monads. It&#039;ll certainly take a brilliant designer to capture that kind of generality that seems so easy with text into a sensory model (visual, audio, whatever), but it sounds like a fun thing to work on :) The operation of fusion that you show in your talk probably also has nicer interface possibilities on touch devices like the you-know-what. They just beg for a powerful way to program them in a visual+tactile way ... which is a big unfulfilled gap.&lt;/p&gt;

&lt;p&gt;Btw, it was mildly ironic that in your talk you had to resort to textual notation to describe the constructs behind Eros :) That is somewhat like asking for the visual equivalent of the understanding that lists, maybe and IO are in some sense &quot;the same&quot;.&lt;/p&gt;

&lt;p&gt;The download link at http://www.haskell.org/haskellwiki/Eros is broken.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Just watched your talk. TV looks interesting indeed. The need for introspection of fusions (which one of the audience pointed out) struck me too as quite crucial to a tinkering experience. Also, the construction of a widget to visualize a value seemed to be a substantial programming activity in itself &#8211; in other words TV seems to lead to a &#8220;caste&#8221; of developers who focus on building visualizers. For example, building a widget for &#8220;list of x&#8221; &#8211; and the x can be numbers, images, functions of lists of ys, or (to artificially complicate it) &#8220;Parser y&#8221; monads. It&#8217;ll certainly take a brilliant designer to capture that kind of generality that seems so easy with text into a sensory model (visual, audio, whatever), but it sounds like a fun thing to work on <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  The operation of fusion that you show in your talk probably also has nicer interface possibilities on touch devices like the you-know-what. They just beg for a powerful way to program them in a visual+tactile way &#8230; which is a big unfulfilled gap.</p>

<p>Btw, it was mildly ironic that in your talk you had to resort to textual notation to describe the constructs behind Eros <img src='http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  That is somewhat like asking for the visual equivalent of the understanding that lists, maybe and IO are in some sense &#8220;the same&#8221;.</p>

<p>The download link at <a href="http://www.haskell.org/haskellwiki/Eros" rel="nofollow">http://www.haskell.org/haskellwiki/Eros</a> is broken.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-43287</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Wed, 07 Apr 2010 15:38:27 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-43287</guid>
		<description>&lt;p&gt;@Kumar - I see Unix pipe examples like &lt;code&gt;ls &#124; grep txt&lt;/code&gt; as hinting in the direction I&#039;m talking about but not quite going there.  For instance, while &lt;code&gt;grep&lt;/code&gt; is a pure function, it takes its two inputs in very different ways, one of which is non-compositional (except through inconsistent hacks).  Also, &lt;code&gt;ls&lt;/code&gt; takes its input in a very non-functional way.  It accesses various bits of mutable state (current working directory and current file system contents), as well as having an implicit reference to a particular file system.  And then there&#039;s the lack of static typing in Unix chains.  Please see my &lt;a href=&quot;http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/&quot; rel=&quot;nofollow&quot;&gt;&quot;modern marriage&quot;&lt;/a&gt; talk for discussion of these points. (Near the start in discussing the Unix dream and how its choice of text I/O prevented it from achieving that dream.)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@Kumar &#8211; I see Unix pipe examples like <code>ls | grep txt</code> as hinting in the direction I&#8217;m talking about but not quite going there.  For instance, while <code>grep</code> is a pure function, it takes its two inputs in very different ways, one of which is non-compositional (except through inconsistent hacks).  Also, <code>ls</code> takes its input in a very non-functional way.  It accesses various bits of mutable state (current working directory and current file system contents), as well as having an implicit reference to a particular file system.  And then there&#8217;s the lack of static typing in Unix chains.  Please see my <a href="http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/" rel="nofollow">&#8220;modern marriage&#8221;</a> talk for discussion of these points. (Near the start in discussing the Unix dream and how its choice of text I/O prevented it from achieving that dream.)</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Kumar</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-43280</link>
		<dc:creator>Kumar</dc:creator>
		<pubDate>Wed, 07 Apr 2010 03:05:12 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-43280</guid>
		<description>&lt;p&gt;Would you consider unix pipes as an example of pushing what we treat as &quot;IO&quot; at the program level just as an interoperation mechanism in the implementation of a &quot;shell programming language&quot;? For example, would &quot;ls &#124; grep txt&quot; be an example of non-IO think you want to shoot for?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Would you consider unix pipes as an example of pushing what we treat as &#8220;IO&#8221; at the program level just as an interoperation mechanism in the implementation of a &#8220;shell programming language&#8221;? For example, would &#8220;ls | grep txt&#8221; be an example of non-IO think you want to shoot for?</p>]]></content:encoded>
	</item>
	<item>
		<title>By: A non von Neumann Style of Programming &#171; Code and Bugs</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-40140</link>
		<dc:creator>A non von Neumann Style of Programming &#171; Code and Bugs</dc:creator>
		<pubDate>Wed, 24 Feb 2010 19:10:24 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-40140</guid>
		<description>&lt;p&gt;[...] more informations, one can read Conal&#8217;s article here. In fact, it was his blog which directed me to Bakus&#8217; work. A single article upon which I [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] more informations, one can read Conal&#8217;s article here. In fact, it was his blog which directed me to Bakus&#8217; work. A single article upon which I [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Linktipps Februar 2010 :: Blackflash</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-36014</link>
		<dc:creator>Linktipps Februar 2010 :: Blackflash</dc:creator>
		<pubDate>Thu, 14 Jan 2010 17:17:28 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-36014</guid>
		<description>&lt;p&gt;&lt;&lt;/p&gt;

&lt;p&gt;p&gt;[...] Erstellungsprozess? Brandon Savage legt seine Gr&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>&lt;</p>

<p>p>[...] Erstellungsprozess? Brandon Savage legt seine Gr</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Neel Krishnaswami</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35991</link>
		<dc:creator>Neel Krishnaswami</dc:creator>
		<pubDate>Thu, 14 Jan 2010 10:22:13 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35991</guid>
		<description>&lt;p&gt;Hi Rajesh,&lt;/p&gt;

&lt;p&gt;Uniqueness types are very nice, and their cousin linear types are of fundamental importance to proof theory and semantics. However, they don&#039;t directly supply an answer to Conal&#039;s question: namely, does this library have good equational reasoning principles?&lt;/p&gt;

&lt;p&gt;A good example of this arises when you try to program randomized algorithms in a functional style. The RNG will need a seed, and so the typical thing to do is to thread the seed through the program, and use either a monadic API or explicit state-passing (with uniqueness types) to manage this work, so that whenever we make a call to the RNG, we have the state available.&lt;/p&gt;

&lt;p&gt;However, this is a lousy API. The reason is that when we&#039;re writing our program, we don&#039;t care about the order in which we make calls to the RNG, since the whole point is that it gives us a source of unpredictable values. However, the fact that we&#039;re passing a state around means that we cannot reorder operations without changing the visible behavior of the program. So there&#039;s a gap between how we want to think about the program, and what we can actually do.&lt;/p&gt;

&lt;p&gt;A better API is to give a monadic API, where the the type constructor P(A) is interpreted as a probability distribution over values of A. Then we give no operation to &quot;call the RNG&quot;, and instead supply an operation to create distributions (for example, &quot;choose p a b&quot; might mean a occurs with probability p and b occurs with probability 1-p). Now, the return of the monad &quot;return v&quot; is the point distribution that is v with probability 1, and the bind operation corresponds to conditionalization.&lt;/p&gt;

&lt;p&gt;Now, this gives very good equational reasoning principles -- in fact, we can apply probability theory very directly to reasoning about our programs. The implementation is actually still the same as the usual state passing implementation, which shows that the API exposed is what&#039;s important to determining the reasoning principles we get. (If you want the details of this idea, there&#039;s a nice paper by Avi Pfeffer and Norman Ramsey &quot;Stochastic Lambda Calculus and Monads of Probability Distributions&quot;, at &lt;a href=&quot;http://www.cs.tufts.edu/~nr/pubs/pmonad.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.cs.tufts.edu/~nr/pubs/pmonad.pdf&lt;/a&gt;.)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hi Rajesh,</p>

<p>Uniqueness types are very nice, and their cousin linear types are of fundamental importance to proof theory and semantics. However, they don&#8217;t directly supply an answer to Conal&#8217;s question: namely, does this library have good equational reasoning principles?</p>

<p>A good example of this arises when you try to program randomized algorithms in a functional style. The RNG will need a seed, and so the typical thing to do is to thread the seed through the program, and use either a monadic API or explicit state-passing (with uniqueness types) to manage this work, so that whenever we make a call to the RNG, we have the state available.</p>

<p>However, this is a lousy API. The reason is that when we&#8217;re writing our program, we don&#8217;t care about the order in which we make calls to the RNG, since the whole point is that it gives us a source of unpredictable values. However, the fact that we&#8217;re passing a state around means that we cannot reorder operations without changing the visible behavior of the program. So there&#8217;s a gap between how we want to think about the program, and what we can actually do.</p>

<p>A better API is to give a monadic API, where the the type constructor P(A) is interpreted as a probability distribution over values of A. Then we give no operation to &#8220;call the RNG&#8221;, and instead supply an operation to create distributions (for example, &#8220;choose p a b&#8221; might mean a occurs with probability p and b occurs with probability 1-p). Now, the return of the monad &#8220;return v&#8221; is the point distribution that is v with probability 1, and the bind operation corresponds to conditionalization.</p>

<p>Now, this gives very good equational reasoning principles &#8212; in fact, we can apply probability theory very directly to reasoning about our programs. The implementation is actually still the same as the usual state passing implementation, which shows that the API exposed is what&#8217;s important to determining the reasoning principles we get. (If you want the details of this idea, there&#8217;s a nice paper by Avi Pfeffer and Norman Ramsey &#8220;Stochastic Lambda Calculus and Monads of Probability Distributions&#8221;, at <a href="http://www.cs.tufts.edu/~nr/pubs/pmonad.pdf" rel="nofollow">http://www.cs.tufts.edu/~nr/pubs/pmonad.pdf</a>.)</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raoul Duke</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35826</link>
		<dc:creator>Raoul Duke</dc:creator>
		<pubDate>Tue, 12 Jan 2010 01:34:42 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35826</guid>
		<description>&lt;p&gt;@clean, uniqueness types.&lt;/p&gt;

&lt;p&gt;please read the DDC thesis which explains how the uniqueness typing ASCII gets quickly out of hand in real world programs, if i recall correctly.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@clean, uniqueness types.</p>

<p>please read the DDC thesis which explains how the uniqueness typing ASCII gets quickly out of hand in real world programs, if i recall correctly.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Rajesh Krishnan</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35760</link>
		<dc:creator>Rajesh Krishnan</dc:creator>
		<pubDate>Mon, 11 Jan 2010 05:34:13 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35760</guid>
		<description>&lt;p&gt;Before everyone loses track of the question Jonathan Turner asked about Clean,  I would also like to know why Uniqueness Types in Clean Language (or another version of it) won&#039;t be a good replacement for Monads that Conal is seeking.&lt;/p&gt;

&lt;p&gt;(forgive me if the question doesn&#039;t make too much sense as I am new to both)&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Before everyone loses track of the question Jonathan Turner asked about Clean,  I would also like to know why Uniqueness Types in Clean Language (or another version of it) won&#8217;t be a good replacement for Monads that Conal is seeking.</p>

<p>(forgive me if the question doesn&#8217;t make too much sense as I am new to both)</p>]]></content:encoded>
	</item>
	<item>
		<title>By: franco</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35622</link>
		<dc:creator>franco</dc:creator>
		<pubDate>Sat, 09 Jan 2010 18:12:50 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35622</guid>
		<description>&lt;p&gt;Do you think that on the lowest level IO is imperative that traps us in the paradigm? At the OS level these imperative fundamentals are the only ways we can perform IO? I understand that every turning complete system can evaluate/emulate any other turing complete system. If we keep the usable fundamentals of IO imperative will that imperativeness trickle up to the highest level expressions?&lt;/p&gt;

&lt;p&gt;If the technically (but awkwardly) functional IO had their imperative essence removed at a sufficiently low level (say the kernel) we could break out of the paradigm? or would it always be a clever hack like monads? Certain things like determining the current time with no inputs are not computable. A machine needs input either from someone initially setting a time and having a piece of quartz determine the next moment; or having a camera record the positions of the heavenly bodies. both of those things are non-deterministic inputs for performing something as trivial as getting the current time.&lt;/p&gt;

&lt;p&gt;Do our realities interact with a turing complete computer analogously to a stack augmenting an FSA (to yield a more powerful pushdown automata)? Do computers really express time/space continuously sequential as we experience it? analogous to a FSA not expressing arbitrary state like a pushdown automata?&lt;/p&gt;

&lt;p&gt;Maybe we need denotative/functional models for things like clocks/time; networking IO; random values; device IO. these things can provide values that can be used in turing complete computations but themselves need not be made up of turing complete systems.&lt;/p&gt;

&lt;p&gt;If we are to bust out of the von Neumann paradigm we need to denote systems beyond turning completeness.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Do you think that on the lowest level IO is imperative that traps us in the paradigm? At the OS level these imperative fundamentals are the only ways we can perform IO? I understand that every turning complete system can evaluate/emulate any other turing complete system. If we keep the usable fundamentals of IO imperative will that imperativeness trickle up to the highest level expressions?</p>

<p>If the technically (but awkwardly) functional IO had their imperative essence removed at a sufficiently low level (say the kernel) we could break out of the paradigm? or would it always be a clever hack like monads? Certain things like determining the current time with no inputs are not computable. A machine needs input either from someone initially setting a time and having a piece of quartz determine the next moment; or having a camera record the positions of the heavenly bodies. both of those things are non-deterministic inputs for performing something as trivial as getting the current time.</p>

<p>Do our realities interact with a turing complete computer analogously to a stack augmenting an FSA (to yield a more powerful pushdown automata)? Do computers really express time/space continuously sequential as we experience it? analogous to a FSA not expressing arbitrary state like a pushdown automata?</p>

<p>Maybe we need denotative/functional models for things like clocks/time; networking IO; random values; device IO. these things can provide values that can be used in turing complete computations but themselves need not be made up of turing complete systems.</p>

<p>If we are to bust out of the von Neumann paradigm we need to denote systems beyond turning completeness.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35466</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Thu, 07 Jan 2010 18:40:04 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35466</guid>
		<description>&lt;blockquote&gt;
  &lt;p&gt;So in theory programs are somewhat composable in that they’re computations that result in a value (other than ()), but in practice I don’t think this gives you much, nor have I ever seen this used in any actual Haskell program.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hi Tom.  Thanks for the correction about the type of &lt;code&gt;main&lt;/code&gt; (though the &lt;code&gt;forall&lt;/code&gt; version is probably not quite what you mean).&lt;/p&gt;

&lt;p&gt;The main hindrance I see in composing Haskell programs is exactly the same as with the original Unix model, which is that the programs inseparably combine functionality and interface (I/O).  I give an alternative in &lt;em&gt;&lt;a href=&quot;http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/&quot; rel=&quot;nofollow&quot;&gt;Tangible Functional Programming: a modern marriage of usability and composability&lt;/a&gt;&lt;/em&gt;.  The trick is to keep functionality &amp; interface together for usability and separable for composability.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<blockquote>
  <p>So in theory programs are somewhat composable in that they’re computations that result in a value (other than ()), but in practice I don’t think this gives you much, nor have I ever seen this used in any actual Haskell program.</p>
</blockquote>

<p>Hi Tom.  Thanks for the correction about the type of <code>main</code> (though the <code>forall</code> version is probably not quite what you mean).</p>

<p>The main hindrance I see in composing Haskell programs is exactly the same as with the original Unix model, which is that the programs inseparably combine functionality and interface (I/O).  I give an alternative in <em><a href="http://conal.net/blog/posts/tangible-functional-programming-a-modern-marriage-of-usability-and-composability/" rel="nofollow">Tangible Functional Programming: a modern marriage of usability and composability</a></em>.  The trick is to keep functionality &amp; interface together for usability and separable for composability.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35458</link>
		<dc:creator>conal</dc:creator>
		<pubDate>Thu, 07 Jan 2010 17:52:50 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35458</guid>
		<description>&lt;p&gt;&lt;blockquote&gt;
Second, can we imagine a world where any functional programmer can pretend to live in a stateless world ? No we can’t. [...]
&lt;/blockquote&gt;

Please see my comments above about self-fulfilling prophecies, hand-waving arguments, and self-deceit.&lt;/p&gt;

&lt;p&gt;As I said, I don&#039;t care whether you&#039;re playing &quot;Yes, we can&quot; or &quot;No, we can&#039;t&quot;, so long as you&#039;re rigorous.  Rigorous proofs of possibility are usually (not always) constructive: demonstrate an example.  That demonstration is what I&#039;m working toward and inviting others along, as in this post and most of my other work.  Rigorous/correct impossibility proofs are usually much more profound (e.g., uncountability of the reals).  The required rigor will reveal your assumptions and maybe point you to the possibility you set out to disprove.  And if it turns out that you&#039;re correct about impossibility, your rigorous demonstration will be helpful to others.  Much more so than the popular practice I&#039;ve been calling &quot;proof by lack of imagination&quot;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p><blockquote>
Second, can we imagine a world where any functional programmer can pretend to live in a stateless world ? No we can’t. [...]
</blockquote>

Please see my comments above about self-fulfilling prophecies, hand-waving arguments, and self-deceit.</p>

<p>As I said, I don&#8217;t care whether you&#8217;re playing &#8220;Yes, we can&#8221; or &#8220;No, we can&#8217;t&#8221;, so long as you&#8217;re rigorous.  Rigorous proofs of possibility are usually (not always) constructive: demonstrate an example.  That demonstration is what I&#8217;m working toward and inviting others along, as in this post and most of my other work.  Rigorous/correct impossibility proofs are usually much more profound (e.g., uncountability of the reals).  The required rigor will reveal your assumptions and maybe point you to the possibility you set out to disprove.  And if it turns out that you&#8217;re correct about impossibility, your rigorous demonstration will be helpful to others.  Much more so than the popular practice I&#8217;ve been calling &#8220;proof by lack of imagination&#8221;.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Vainsencher</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35434</link>
		<dc:creator>Daniel Vainsencher</dc:creator>
		<pubDate>Thu, 07 Jan 2010 09:01:03 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35434</guid>
		<description>&lt;p&gt;Two thoughts. Having a comfy world that is highly compatible with a languages model is both powerful and dangerous. This is exemplified by Smalltalks such as Squeak. There the impedance mismatch caused by I/O is different and less important than in functional programming, but it still exists. However, a new program can go far before needing to do input/output because a default form of persistance is provided for arbitrary program states/object graphs. For many programs it is trivial to ship and share them bundled with their data, to be supplemented only by user interactions. This has interesting effects.&lt;/p&gt;

&lt;p&gt;Imagine starting up GHCi and always having available data structures representing natively all the source (parse trees?) of GHC and libraries, many images, sounds... wonderful. The ability to concentrate on manipulating information in the form most natural for the programming model (in this case objects), before having to deal with &quot;the real world&quot;, makes it amazingly easy to play with ideas. Addictive.&lt;/p&gt;

&lt;p&gt;That&#039;s the second part - probably half the reason Smalltalk is less popular than its successors, is that it (community, libraries) places less focus on connecting to the rest of the world. This is changing with the web, but...&lt;/p&gt;

&lt;p&gt;For denotational programming, in Haskell or otherwise, I&#039;d love to see what it would do to my computer if it transformed it in its own image, but be careful what you wish for on the way there.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Two thoughts. Having a comfy world that is highly compatible with a languages model is both powerful and dangerous. This is exemplified by Smalltalks such as Squeak. There the impedance mismatch caused by I/O is different and less important than in functional programming, but it still exists. However, a new program can go far before needing to do input/output because a default form of persistance is provided for arbitrary program states/object graphs. For many programs it is trivial to ship and share them bundled with their data, to be supplemented only by user interactions. This has interesting effects.</p>

<p>Imagine starting up GHCi and always having available data structures representing natively all the source (parse trees?) of GHC and libraries, many images, sounds&#8230; wonderful. The ability to concentrate on manipulating information in the form most natural for the programming model (in this case objects), before having to deal with &#8220;the real world&#8221;, makes it amazingly easy to play with ideas. Addictive.</p>

<p>That&#8217;s the second part &#8211; probably half the reason Smalltalk is less popular than its successors, is that it (community, libraries) places less focus on connecting to the rest of the world. This is changing with the web, but&#8230;</p>

<p>For denotational programming, in Haskell or otherwise, I&#8217;d love to see what it would do to my computer if it transformed it in its own image, but be careful what you wish for on the way there.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Turner</title>
		<link>http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm/comment-page-1#comment-35394</link>
		<dc:creator>Jonathan Turner</dc:creator>
		<pubDate>Wed, 06 Jan 2010 20:06:32 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=97#comment-35394</guid>
		<description>&lt;p&gt;Just curious, how do you see alternate solutions like Clean&#039;s uniqueness types?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Just curious, how do you see alternate solutions like Clean&#8217;s uniqueness types?</p>]]></content:encoded>
	</item>
</channel>
</rss>
