On Fri, Dec 30, 2011 at 8:12 AM, Conal Elliott <conal@conal.net> wrote:
On Fri, Dec 30, 2011 at 12:52 AM, Heinrich Apfelmus <apfelmus@quantentunnel.de> wrote:
Conal Elliott wrote:
I wrote that post to point out the fuzziness that fuels many
discussion threads like this one. See also http://conal.net/blog/posts/notions-of-purity-in-haskell/ and the
comments.

I almost never find value in discussion about whether language X is "functional", "pure", or even "referentially transparent", mainly
because those terms are used so imprecisely. In the notions-of-purity
post, I suggest another framing, as whether or not a language and/or
collection of data types is/are "denotative", to use Peter Landin's
recommended replacement for "functional", "declarative", etc. I
included some quotes and a link in that post. so people can track
down what "denotative" means. In my understanding, Haskell-with-IO is
not denotative, simply because we do not have a
(precise/mathematical) model for IO. And this lack is by design, as
explained in the "toxic avenger" remarks in a comment on that post.

I often hear explanations of what IO means (world-passing etc), but I
don't hear any consistent with Haskell's actual IO, which includes nondeterministic concurrency. Perhaps the difficulties could be
addressed, but I doubt it, and I haven't seen claims pursued far
enough to find out.

Personally, the operational semantics given in SPJ's "Tackling the Awkward Squad" always struck me as an accurate model of how GHC performs IO.

It might be accurate, but it's not denotational.  - Conal

Moreover, afaict, the "Awkward Squad" operational semantics tackles only a tiny fraction of the IO type.

One of the strengths of Haskell IO is that it can be extended easily via the FFI. And I guess that strength is also a theoretical weakness in the sense that only a tiny fraction of the IO interface has even an operational semantics.

  - Conal