Haskell勉強中(1)

Haskellのお勉強中。『ふつケル』をだらだら読んでます。最初数十ページ程度読んだ。

  • 再代入が不可能、素敵
  • あれ、これって『リファクタリング』読んでたら行き着く境地じゃね?
  • 関数型って「変数に関数を入れられる」のではなく「型名と関数名が区別できない」というレベルの話なのか
  • 参照透過性は便利そう。俺のコードはFlyweight使いすぎて読みづらい事この上ない
  • Javaは引数を評価してから式を評価する」は目から鱗が半分くらい、「あー、不便だったよね」が半分くらい

「変数を(外部入力以外)一切持たない」「全てを関数呼び出しで行なう」は、『リファクタリング』で行き着く完成形。その延長上と考えればそう難しい話ではなさそう。
ただ、その辺を言語として保障する事が、言語構造上大きな意味を持つ、というのは関心した。同じ呼び出し結果が常に同じ値である事が保障されていれば、その結果は常に一度だけ評価すればいいわけで、つまり全て関数呼び出しにしてもキャッシュできるようなものだから、速度が落ちない、という理屈かな。で、同じ呼び出しが常に同じ値ならば、変数と関数は同一と見なせるし、変数名も不要で「パラメータの違う別の呼び出し」に過ぎないと。
面白いなぁ。
現在の疑問:

  • 名前空間が無いとコードの整理がしにくいような。序盤だからまだ出てきてないだけかな?
  • 「一時的な状態の保存」である変数を捨ててしまって、本当にソフトウェア足りうるのか半信半疑、かつ楽しみ