
On Mon, May 2, 2011 at 9:29 AM, Dominique Devriese
I agree with your analysis. Throughout his different articles, I think Harper partly has a point when he says that laziness brings certain disadvantages (like e.g. complex memory and CPU behaviour) to Haskell (although I disagree with some of his other arguments here). However, like you say, he misses the ball by amalgamating laziness with referential transparency, where the first probably requires the second but not vice versa. This allows him to simply dismiss both, which is convenient for his apparent conclusion that "ML is strictly better than Haskell", since referential transparency and purity are (in my view) one of the things ML lacks most when compared to Haskell. His only other argument against referential transparency and purity seems to be his mentioning of "benign effects", which is weak for two reasons: first, benign effects are clearly not what typical ML programs use non-purity for and second, benign effects can be supported much more conservatively using Haskell's unsafePerformIO.
Or, instead of unsafePerformIO, runST. Saying that we should allow effects everywhere because there are "benign effects" is like saying that we should allow GOTOs everywhere because there are some "benign GOTOs". By allowing these "benign things" we also open a can of worms of "malign things". Cheers, -- Felipe.