Erik Meijer, a prominent language designer, has a thought-provoking article in ACM Queue. His thesis is that a language cannot be partially functional: “The slightest implicit imperative effect erases all the benefits of purity.” He calls this the curse of the “excluded middle.” One must either (a) except that programming is about mutating state or (b) “abolish[…] all implicit imperative effects and mak[e] them fully explicit in the type system.” He makes a strong case but I need to noodle on it before I will claim it as mine.
The article is good for introducing the issues. Such as the inherent disconnect between the static program and the runtime environment that arises with lazy or deferred execution.