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:Personally, the operational semantics given in SPJ's "Tackling the Awkward Squad" always struck me as an accurate model of how GHC performs IO.
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.
It might be accurate, but it's not denotational. - Conal