<?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: Is Haskell a purely functional language?</title>
	<atom:link href="http://conal.net/blog/posts/is-haskell-a-purely-functional-language/feed" rel="self" type="application/rss+xml" />
	<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language</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: Why are getArgs and getProgName IO actions? - Tech Forum Network</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-632</link>
		<dc:creator><![CDATA[Why are getArgs and getProgName IO actions? - Tech Forum Network]]></dc:creator>
		<pubDate>Fri, 07 Jun 2013 14:56:34 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-632</guid>
		<description><![CDATA[&lt;p&gt;[...] Don Stewart&#8217;s as the most simple and concise, but Conal&#8217;s (with its associated blog post) is definitely worth a [...]&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>[&#8230;] Don Stewart&#8217;s as the most simple and concise, but Conal&#8217;s (with its associated blog post) is definitely worth a [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andy Melnikov</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-630</link>
		<dc:creator><![CDATA[Andy Melnikov]]></dc:creator>
		<pubDate>Fri, 18 Nov 2011 10:50:15 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-630</guid>
		<description><![CDATA[&lt;blockquote&gt;
  &lt;p&gt;Consider that IO includes exception-handling&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;IO also includes concurrency, which is even more troublesome.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<blockquote>
  <p>Consider that IO includes exception-handling</p>
</blockquote>

<p>IO also includes concurrency, which is even more troublesome.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Manuel Chakravarty</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-629</link>
		<dc:creator><![CDATA[Manuel Chakravarty]]></dc:creator>
		<pubDate>Mon, 01 Aug 2011 00:23:02 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-629</guid>
		<description><![CDATA[&lt;p&gt;Vinod, some of it call it &quot;purely functional programming&quot;.&lt;/p&gt;

&lt;p&gt;Conal, nice observation about Landin. I have to say &quot;denotative&quot; is an appealing term.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>Vinod, some of it call it &#8220;purely functional programming&#8221;.</p>

<p>Conal, nice observation about Landin. I have to say &#8220;denotative&#8221; is an appealing term.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vinod</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-628</link>
		<dc:creator><![CDATA[Vinod]]></dc:creator>
		<pubDate>Thu, 01 Apr 2010 04:18:36 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-628</guid>
		<description><![CDATA[&lt;p&gt;I think it is unfortunate that functional programming means what it means today :) When I was a physics graduate student I always thought that functional programming meant programming with functions though I never took the meaning of the word &quot;function&quot; as in mathematics but as in Fortran :)&lt;/p&gt;

&lt;p&gt;I suppose the correct phrase should be &quot;side effect free functional programming&quot;&lt;/p&gt;

&lt;p&gt;Oh well... :)&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>I think it is unfortunate that functional programming means what it means today <img src="http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> When I was a physics graduate student I always thought that functional programming meant programming with functions though I never took the meaning of the word &#8220;function&#8221; as in mathematics but as in Fortran <img src="http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>

<p>I suppose the correct phrase should be &#8220;side effect free functional programming&#8221;</p>

<p>Oh well&#8230; <img src="http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Conal</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-627</link>
		<dc:creator><![CDATA[Conal]]></dc:creator>
		<pubDate>Sat, 20 Mar 2010 23:28:21 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-627</guid>
		<description><![CDATA[&lt;blockquote&gt;
  &lt;p&gt;One could say that Haskell IO expressions “denote something” but we don’t quite know what ....&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Though I doubt that &lt;code&gt;IO&lt;/code&gt; does denote anything, given the requirement of compositionality of semantics.  Consider that &lt;code&gt;IO&lt;/code&gt; includes exception-handling, which is sensitive to order-of-evaluation of pure (non-IO) expressions. Exception-handling thus extracts more meaning than exists out of pure sub-expressions, breaking compositionality.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<blockquote>
  <p>One could say that Haskell IO expressions “denote something” but we don’t quite know what &#8230;.</p>
</blockquote>

<p>Though I doubt that <code>IO</code> does denote anything, given the requirement of compositionality of semantics.  Consider that <code>IO</code> includes exception-handling, which is sensitive to order-of-evaluation of pure (non-IO) expressions. Exception-handling thus extracts more meaning than exists out of pure sub-expressions, breaking compositionality.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-626</link>
		<dc:creator><![CDATA[conal]]></dc:creator>
		<pubDate>Tue, 12 Jan 2010 19:52:14 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-626</guid>
		<description><![CDATA[&lt;blockquote&gt;
  &lt;p&gt;Nobody&#039;s mentioned it, but isn&#039;t this what Landin called &quot;denotative&quot;?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Oh -- I&#039;d forgotten about Landin&#039;s use of &quot;denotative&quot;.  Thanks for the reminder.&lt;/p&gt;

&lt;p&gt;From section 8 of &lt;em&gt;&lt;a href=&quot;http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf&quot; rel=&quot;nofollow&quot;&gt;The Next 700 Programming Languages&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The commonplace expressions of arithmetic and algebra have a certain simplicity that most communications to computers lack. In particular, (a) each expression has a nesting subexpression structure, (b) each subexpression denotes something (usually a number, truth value or numerical function), (c) the thing an expression denotes, i.e., its &quot;value&quot;, depends only on the values of its subexpressions, not on other properties of them.&lt;/p&gt;
  
  &lt;p&gt;It is these properties, and crucially (c), that explains why such expressions are easier to construct and understand. Thus it is (c) that lies behind the evolutionary trend towards &quot;bigger righthand sides&quot; in place of strings of small, explicitly sequenced assignments and jumps. When faced with a new notation that borrows the functional appearance of everyday algebra, it is (c) that gives us a test for whether the notation is genuinely functional or merely masquerading.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then in section 9:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;An important distinction is the one between indicating what behavior, step-by-step, you want the machine to perform, and merely indicating what outcome you want. Put that way, the distinction will not stand up to close investigation. I suggest that the conditions (a-c) in Section 8 are a necessary part of &quot;merely indicating what outcome you want.&quot; The word &quot;denotative&quot; seems more appropriate than nonprocedural, declarative or functional. The antithesis of denotative is &quot;imperative.&quot; Effectively &quot;denotative&quot; means &quot;can be mapped into ISWIM without using jumping or assignment,&quot; given appropriate primitives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think Landin does indeed mean what I mean.  I&#039;m uncertain, as his conditions (b) &amp; (c) say that subexpressions &quot;denote something&quot;, but he doesn&#039;t say that the &lt;em&gt;something&lt;/em&gt; must be explicitly defined.  One could say that Haskell IO expressions &quot;denote something&quot; but we don&#039;t quite know what, but then how could we test the claim for validity?  What I mean by &quot;denotational programming&quot; requires well-defined, precise and tractable denotations.  Those denotations then serve as the basis for implementation correctness, documentation, and formal reasoning.&lt;/p&gt;

&lt;p&gt;If I knew that Landin did indeed mean having a precise &amp; tractable denotation, I&#039;d happily adopt his &quot;denotative&quot; in place of my &quot;denotational&quot;.  Hm.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<blockquote>
  <p>Nobody&#8217;s mentioned it, but isn&#8217;t this what Landin called &#8220;denotative&#8221;?</p>
</blockquote>

<p>Oh &#8212; I&#8217;d forgotten about Landin&#8217;s use of &#8220;denotative&#8221;.  Thanks for the reminder.</p>

<p>From section 8 of <em><a href="http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf" rel="nofollow">The Next 700 Programming Languages</a></em>:</p>

<blockquote>
  <p>The commonplace expressions of arithmetic and algebra have a certain simplicity that most communications to computers lack. In particular, (a) each expression has a nesting subexpression structure, (b) each subexpression denotes something (usually a number, truth value or numerical function), (c) the thing an expression denotes, i.e., its &#8220;value&#8221;, depends only on the values of its subexpressions, not on other properties of them.</p>
  
  <p>It is these properties, and crucially (c), that explains why such expressions are easier to construct and understand. Thus it is (c) that lies behind the evolutionary trend towards &#8220;bigger righthand sides&#8221; in place of strings of small, explicitly sequenced assignments and jumps. When faced with a new notation that borrows the functional appearance of everyday algebra, it is (c) that gives us a test for whether the notation is genuinely functional or merely masquerading.</p>
</blockquote>

<p>Then in section 9:</p>

<blockquote>
  <p>An important distinction is the one between indicating what behavior, step-by-step, you want the machine to perform, and merely indicating what outcome you want. Put that way, the distinction will not stand up to close investigation. I suggest that the conditions (a-c) in Section 8 are a necessary part of &#8220;merely indicating what outcome you want.&#8221; The word &#8220;denotative&#8221; seems more appropriate than nonprocedural, declarative or functional. The antithesis of denotative is &#8220;imperative.&#8221; Effectively &#8220;denotative&#8221; means &#8220;can be mapped into ISWIM without using jumping or assignment,&#8221; given appropriate primitives.</p>
</blockquote>

<p>I think Landin does indeed mean what I mean.  I&#8217;m uncertain, as his conditions (b) &amp; (c) say that subexpressions &#8220;denote something&#8221;, but he doesn&#8217;t say that the <em>something</em> must be explicitly defined.  One could say that Haskell IO expressions &#8220;denote something&#8221; but we don&#8217;t quite know what, but then how could we test the claim for validity?  What I mean by &#8220;denotational programming&#8221; requires well-defined, precise and tractable denotations.  Those denotations then serve as the basis for implementation correctness, documentation, and formal reasoning.</p>

<p>If I knew that Landin did indeed mean having a precise &amp; tractable denotation, I&#8217;d happily adopt his &#8220;denotative&#8221; in place of my &#8220;denotational&#8221;.  Hm.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: conal</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-625</link>
		<dc:creator><![CDATA[conal]]></dc:creator>
		<pubDate>Tue, 12 Jan 2010 19:25:51 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-625</guid>
		<description><![CDATA[&lt;blockquote&gt;
  &lt;p&gt;I am not sure I understand what this means:&lt;/p&gt;
  
  &lt;p&gt;&quot;functional programming has simple, precise semantics&quot; or &quot;functional programming has good compositional properties&quot; or &quot;functional programming is good for reasoning about&quot;.&lt;/p&gt;
  
  &lt;p&gt;What would Haskell&#039;s monadic I/O look like if you had what you are thinking about functional?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To the Haskell programmer, it wouldn&#039;t look like anything at all.  In other words, the imperative computation would be hidden away in implementations of denotationally defined abstractions.  Just as is the case now with imperative computations that implement function call and laziness (stack munging and thunk overwriting).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Can you give a few example of what you can&#039;t defined precisely, what kind of compositional properties are missing, and/or an example of monadic IO program that you can&#039;t reason about.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The early part of Backus&#039;s &quot;liberated&quot; paper discusses these issues with imperative programming.  Haskell IO programming is a way to generate imperative computations.  Those computations involve system calls, side-effected variables, and loops, just as in Fortran.  And they can contain semantically nondeterministic concurrency.  Very difficult to reason about precisely.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<blockquote>
  <p>I am not sure I understand what this means:</p>
  
  <p>&#8220;functional programming has simple, precise semantics&#8221; or &#8220;functional programming has good compositional properties&#8221; or &#8220;functional programming is good for reasoning about&#8221;.</p>
  
  <p>What would Haskell&#8217;s monadic I/O look like if you had what you are thinking about functional?</p>
</blockquote>

<p>To the Haskell programmer, it wouldn&#8217;t look like anything at all.  In other words, the imperative computation would be hidden away in implementations of denotationally defined abstractions.  Just as is the case now with imperative computations that implement function call and laziness (stack munging and thunk overwriting).</p>

<blockquote>
  <p>Can you give a few example of what you can&#8217;t defined precisely, what kind of compositional properties are missing, and/or an example of monadic IO program that you can&#8217;t reason about.</p>
</blockquote>

<p>The early part of Backus&#8217;s &#8220;liberated&#8221; paper discusses these issues with imperative programming.  Haskell IO programming is a way to generate imperative computations.  Those computations involve system calls, side-effected variables, and loops, just as in Fortran.  And they can contain semantically nondeterministic concurrency.  Very difficult to reason about precisely.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Magnus</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-624</link>
		<dc:creator><![CDATA[Magnus]]></dc:creator>
		<pubDate>Tue, 12 Jan 2010 16:18:46 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-624</guid>
		<description><![CDATA[&lt;p&gt;Nobody&#039;s mentioned it, but isn&#039;t this what Landin called &quot;denotative&quot;?&lt;/p&gt;

&lt;p&gt;BTW, his paper on the next 700 programming languages reads in many ways like a description of Haskell :-)&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>Nobody&#8217;s mentioned it, but isn&#8217;t this what Landin called &#8220;denotative&#8221;?</p>

<p>BTW, his paper on the next 700 programming languages reads in many ways like a description of Haskell <img src="http://conal.net/blog/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: daryoush</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-623</link>
		<dc:creator><![CDATA[daryoush]]></dc:creator>
		<pubDate>Tue, 12 Jan 2010 01:25:18 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-623</guid>
		<description><![CDATA[&lt;p&gt;I am not sure I understand what this means:&lt;/p&gt;

&lt;p&gt;&lt;i&gt;“functional programming has simple, precise semantics” or “functional programming has good compositional properties” or “functional programming is good for reasoning about”. &lt;/i&gt;&lt;/p&gt;

&lt;p&gt;What would Haskell’s monadic I/O look like if you had what you are thinking about functional?  Can you give a few example of what you can&#039;t defined precisely,  what kind of compositional properties are missing, and/or an example of monadic IO program that you can&#039;t reason about.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;/p&gt;

&lt;p&gt;Daryoush&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>I am not sure I understand what this means:</p>

<p><i>“functional programming has simple, precise semantics” or “functional programming has good compositional properties” or “functional programming is good for reasoning about”. </i></p>

<p>What would Haskell’s monadic I/O look like if you had what you are thinking about functional?  Can you give a few example of what you can&#8217;t defined precisely,  what kind of compositional properties are missing, and/or an example of monadic IO program that you can&#8217;t reason about.</p>

<p>Thanks,</p>

<p>Daryoush</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: S.J.</title>
		<link>http://conal.net/blog/posts/is-haskell-a-purely-functional-language#comment-622</link>
		<dc:creator><![CDATA[S.J.]]></dc:creator>
		<pubDate>Sat, 09 Jan 2010 05:06:35 +0000</pubDate>
		<guid isPermaLink="false">http://conal.net/blog/?p=98#comment-622</guid>
		<description><![CDATA[&lt;p&gt;My comment&#039;s about using a broader term at the expense of losing specificity implied by functional programming. Surely denotational encompasses functional, but covers many other aspects as well. Perhaps that&#039;s your intent.&lt;/p&gt;
]]></description>
		<content:encoded><![CDATA[<p>My comment&#8217;s about using a broader term at the expense of losing specificity implied by functional programming. Surely denotational encompasses functional, but covers many other aspects as well. Perhaps that&#8217;s your intent.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
