Looking back to that denotative future

Actually, some implementations of early functional languages did use that arrangement:

It certainly seems to make sense: at that time, there were very few palatable ingredients for the “imperative language soup” - why would anyone allow that glop to ruin their delectable new declarative or denotative language? Imperativity begone!

But Haskell isn’t arranged in this way. Futhermore, languages which started with that arrangement rarely sustain it e.g. adding support for imperativity like I/O to Dhall have already been contemplated twice:

So the next time anyone suggests that shifting semantically imperative mechanisms out of the programming model and into the implementation is the solution, ask them to explain:

  • why it didn’t work before,

  • and why it should work now.

2 Likes