One other key difference between lisp and haskell... Common Lisp has a standard definition. My code from the last century still compiles and runs as does code from all of the books.
On the other hand, haskell seems to be a struggle. I recently downloaded the book "Write yourself a scheme in 48 hours" written in 2007. Page 18 tries to "import Monad", which fails. I tried surfing for that string and only see "Control.Monad". I tried installing the lastest Haskell and the workbench. Still no luck. So, 18 pages into a book written 11 years ago and the trivial examples don't work.
Certainly it does but given that Control.Monad is sufficient I do not see it as a larger issue. Haskell 2010 is a different language with libraries refactored. If you wish to use an older text (pre Haskell 2010) then it would probably be best to try either Hugs98 or one of the other haskell implementations as GHC is concerned with the current standard.
The problem is the phrase "the current standard". Is Haskell going to become the new C++? C++11, C++14, C++17, etc? Is it going to live up to the phrase "I love standards. There are so many to choose from."? Is it going to become a python 2.7 vs python 3 vs python 4 game?
I understand the benefit of using the same name as you can trade on the prior mindset. But if old code won't compile then it isn't the same language.
If you're going to change a language with a standard (e.g. Haskell98), change the name. Call it Peyton or something. Otherwise there will be a Haskell20 that is refactored for dependent types that won't compile under Haskell10. Then when people claim to "know haskell" the question becomes ... which language?
The "current standard" game leads into "library hell".
I think in theory you are correct: as soon as you have 2 different "versions" of a language, you can, with sufficient creativity, construct a program that will break with the newer version.
How likely this is going to bite you in practice, though, is a different question, and one where the specifics of the language are important.
C++ is a language without a module system; instead, the preprocessor resolves #include directives by textual substitution, which is of course extremely fragile wrt. compatibility, particularly considering idiomatic "header-only libraries" of the boost variety.
Haskell doesn't use #include but has a module system, which avoids a lot of the C++ standard incompatibility issues, because you can compile each module independently with its required language standard.
Also note that there is a pragma you can put into modules to specify the version directly inline, e.g., "{-# LANGUAGE Haskell2010 #-}" or "{-# LANGUAGE Haskell98 #-}" .
On the other hand, haskell seems to be a struggle. I recently downloaded the book "Write yourself a scheme in 48 hours" written in 2007. Page 18 tries to "import Monad", which fails. I tried surfing for that string and only see "Control.Monad". I tried installing the lastest Haskell and the workbench. Still no luck. So, 18 pages into a book written 11 years ago and the trivial examples don't work.