News for hackers. Stuff that matters.
Re:Mastering Time-to-Market with Haskell by catnaroek on Tuesday November 22, 2016 @02:19PM (#13016702)
> except that I'm not sure how different it is from mine, because the equational law you refer to applies to syntactic terms

An effectful language can be given a denotational semantics. At least from what I've seen, when most people say “pure”, they mean “effect-free”.

> It's easy to come with an equivalence relation that would hold for `foo`, but not at the syntax level [emphasis mine]

Yep, indeed, that's the whole point.

Re:Mastering Time-to-Market with Haskell by pron on Tuesday November 22, 2016 @02:43PM (#13016928)
> when most people say “pure”, they mean “effect-free”

But saying "effect free" doesn't mean much unless you define what an effect is, and what constitutes an effect depends on the language. I meant to define the same thing without referring to another vague definition.

Re:Mastering Time-to-Market with Haskell by catnaroek on Tuesday November 22, 2016 @02:46PM (#13016962)
I already defined above what an effect is. My definicion is technically precise and language-independent.
Re:Mastering Time-to-Market with Haskell by pron on Tuesday November 22, 2016 @03:14PM (#13017237)
OK, so you define effect-freedom using the language's equality operator. I agree it's a better definition than mine, but I think assembly language and BASIC would still qualify as effect-free (provided there's no concurrency) even though some people would not consider them pure.
Re:Mastering Time-to-Market with Haskell by catnaroek on Tuesday November 22, 2016 @03:39PM (#13017449)
> OK, so you define effect-freedom using the language's equality operator.

Not the runtime equality testing operator. Rather, the language's static notion of contextual equivalence.

It just happens to be the case that most high-level languages provide a built-in equality testing operator that works on primitive types, returning `true` iff its operands are contextually equivalent values.

> I think assembly language and BASIC would still qualify as effect-free

I don't even know what a good notion of contextual equivalence for any assembly language would be.

As for BASIC, I haven't used the old ones, so I can't comment on them. I've used Visual Basic, which most certainly has effectful procedures.

Re:Mastering Time-to-Market with Haskell by pron on Tuesday November 22, 2016 @03:47PM (#13017508)
> Not the runtime equality testing operator. Rather, the language's static notion of contextual equivalence.

How is that different from denotational semantics?

> The ones that can be effectful or effect-free are specific computations, not whole languages.

Well, we could define an effect-free language as one where all programs are effect-free. But anyway, what is the "static notion of contextual equivalence" in assembly (or BASIC), and how can you write an effectful program in such a language?