Schemeに代表されるLisp系やML系の言語はcall-by-valueだから関数型プログラミングに破壊的代入(Cなんかでの普通の代入演算)も
問題なく追加できて手続き的プログラミングとが共存できる。
ところがHaskellのようなcall-by-need (lazy evaluation) の関数型言語はそうはいかない。
lazyな関数型言語に破壊的代入なんて追加しようものなら整合性のあるすっきりした意味論が構築できない。
だから手続き的なスタイルの方が自然なケースでも強引に関数型プログラミングのスタイルで書かなければならなくなって不自然。
ところが関数型プログラミングの信徒はlazyな言語こそが関数型プログラミング言語の正統派だと主張するから、ますます現実とかけ離れてしまう。
関数型プログラミングが世の中に広まらないのはこういう宗教的とさえ言えるファナティックな原理主義が原因の大きな部分なのは確か。