[Haskell-cafe] Alternative name for return
timon.gehr at gmx.ch
Thu Aug 8 02:40:36 CEST 2013
On 08/08/2013 01:19 AM, Jerzy Karczmarczuk wrote:
> Bardur Arantsson comments the comment of Joe Quinn:
>>> >On 8/7/2013 11:00 AM, David Thomas wrote:
>>>> >>twice :: IO () -> IO ()
>>>> >>twice x = x >> x
>>>> >>I would call that evaluating x twice (incidentally creating two
>>>> >>separate evaluations of one pure action description), but I'd like to
>>>> >>better see your perspective here.
>>> >x is only evaluated once, but/executed/ twice. For IO, that means
>>> >magic. For other types, it means different things. For Identity, twice =
>> Your point being? x is the same thing regardless of how many times you
>> run it.
> What do you mean by "the same thing"? You cannot compare 'them' in any
> reasonable sense.
(He is reasoning _about_ the language and not _within_ the language
because Haskell does not support very powerful reasoning internally.)
> You make the distinction between "evaluate",
Which essentially means applying reduction rules to an expression until
the result is a value.
> and "execute" or "run", etc. This is not functional.
How would you know?
> Your program doesn't "run" anything, it
> applies (>>=) (or equivalent) to an IO (...) object. This is the only
> "practical evaluation" of it, otherwise it can be passed (or duplicated
> as above). But you cannot apply "bind" twice to the same instance of it
> (in fact, as I said above, "the same instance" is a bit suspicious
Indeed, but you didn't say that above.
> The "running" or "execution" takes place outside of your program. In
> such a way Richard O'Keefe and I converge... That's why I say that the
> concept of purity is meaningless in the discussed context.
Not meaningless, but redundant. The point of having a purely functional
programming language is to have reasoning based on purity be universally
> It is a kind of counterfeit notion, inherited from "pure functions" to something
> which belongs to two different worlds.
'putStr "c"' is a pure value.
On the other hand:
'unsafePerformIO (putStr "c")' is not a pure value.
(But this expression does not exist in standard Haskell. unsafePerformIO
"unquotes" the action. You may be confusing the "quoted" and "unquoted"
More information about the Haskell-Cafe