Haskellの心地よさ

関数型ということに、まだしっくりという感じまでいきませんが、高階関数が自然に使えるのは気持ちがいいですね。Smalltalkもリファクタリングしていくと、関数型が適したアルゴリズムの場合、自然と関数型に近づいていきますが、高階関数となると「できる」であって、自然な表現にはなっていないと思います。すべてがオブジェクトだけど、オブジェクトをメッセージにしようとすると手間がかかる。Haskellでは、変数は引数のない関数で、変数と関数の間に敷居がないのが面白いです。
局所関数を定義できるのがいいですね。Smalltalkだとメソッドの階層がフラットなので、リファクタリングしていくうちに、アルゴリズムがコードの中に拡散していく感じがあって、どこが本体かわからなくなるところが構造物としては問題だと思います。有機物として見ると魅力的なんですけど。
モナドは、公理的に飲み込もうとすると抵抗がありましたが、チェーンと例外の一般化だなと思ったら、頭の中で落ち着きました。
関数型は、副作用(状態)がないとよく言いますが、状態を持つ命令型コードを機械的に置き換える時には、状態を引数で渡すようなことをしますので、状態がないという表現が正しいのかよくわかりません。再代入がないということですね。言語仕様でメモリの書き換えはしないけれど、だからといって組み合わせ回路だけで組めるわけじゃない。ガーベッジコレクションして再度書き込めば、再代入と同じ効果です。
全体に間違いなく抽象度が上がっていて、実装と本質の差が小さくなる言語だと思いました。でも、GUIやIOが多いプログラムの時には選択肢から外れることが多そうかな。プログラムというよりはライブラリ/エンジン構築言語という気がします。