[Haskell-cafe] On the purity of Haskell
Steve Horne
sh006d3592 at blueyonder.co.uk
Thu Dec 29 20:16:41 CET 2011
On 29/12/2011 18:41, Chris Smith wrote:
> Entering tutorial mode here...
>
> On Thu, 2011-12-29 at 10:04 -0800, Donn Cave wrote:
>> We can talk endlessly about what your external/execution results
>> might be for some IO action, but at the formulaic level of a Haskell
>> program it's a simple function value, e.g., IO Int.
> Not to nitpick, but I'm unsure what you might mean by "function value"
> there. An (IO Int) is not a function value: there is no function
> involved at all. I think the word function is causing some confusion,
> so I'll avoid calling things functions when they aren't.
Except that it *is* a function value.
Basically, a data constructor is a self-referencing function. "Just 1"
is a function that returns "Just 1" for instance. According to WinGHCI...
Prelude> :type Just
Just :: a -> Maybe a
Prelude>
The IO monad is a black box - we can't see the data constructors - but
in principle it's the same thing.
The value extracted out of the IO action when it is executed is a
different thing, of course.
> These are PURE values... they do NOT have side effects. Perhaps they
> "describe" side effects in a sense, but that's a matter of how you
> interpret them; it doesn't change the fact that they play the role of
> ordinary values in Haskell. There are no special evaluation rules for
> them.
The semantics of the execution of primitive IO actions are part of the
Haskell language. The execution isn't pure functional. At compile-time
there is no means to evaluate the key functions at all - no way to
extract the result out of an IO action because the action cannot be
executed and so doesn't (yet) have a result. At run-time, that
restriction is removed, or the special evaluation rules are added in -
either claim is fine but the effect that Haskell is doing something it
couldn't do at compile-time.
Yes, *Haskell* is doing it - it's still a part of what the Haskell
language defines.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111229/53250566/attachment.htm>
More information about the Haskell-Cafe
mailing list