Thinking Functionally with Haskell勉強メモ: 第2章
章のタイトルは「式、型、値」。いかにも静的型付き関数型プログラミングっぽい。
面白かった・気になった点:
(+1)
などのSectionが関数として使えるのは便利そう。(-1)
が使えないという点で萎えるけど(関数ではなく単なる負の整数として扱われる)- ラムダ関数は
(\n -> 2*n+1)
などと表記する。が、Haskellではあまり使わないとのこと - 遅延評価は「どのような式でも、最も早い評価順と同じ早さで評価できる。が、式展開の分メモリは使う」
- 遅延評価は
f undefined = undefined
とは限らないのでstrict
ではない - Type classで特定の型ではなく、ある特徴を持つ型のグループ全体を指定することができる(
add :: Num a => a -> a-> a
などのNum a
の部分でIntやFloatなどの数に関連する性質を持ったクラス全体を指定している) - 他にもEqやOrdなどのType classがある。それぞれ
==
や>
などが定義してある必要がある。 - 副作用(この章の例だと標準出力)をコントロールするcommandとIO型(この章ではちょっと顔を出すだけ)
- Haskellのオフサイドルールと
{..; ..; ..;}
といった表記(オフサイドルールは今の所かなり非直感的に感じる・・・)
最初に読んだ時は全く心に引っかからなかった章だが、一旦読み進めてから戻ってくると結構面白かった。やはり概念が実際に使われている様を見た後だと吸収力が違ってくるのか。