Haskellの基礎(2) 型と高階関数

3.1 型と値

今日は型についてです。
これまでちょこちょことHaskellの入門サイトを見てきましたが(そんなに見たわけではないけど)一番分かりやすいです。
これまでであれば

Int -> [a] -> [a]


なんて書かれると、ちょっとんんん〜?となってましたけど、今はそんなことない。
"(Show a) =>"や"IO ()"などは別の章で学習するとのこと。これは楽しみです(結構先ですが)。

3.2 高階関数

関数について

関数も一つの値とのこと。たとえば

cube n = n * n * n


はnを三乗する関数を値と見なし、cubeという変数がその値に束縛されている、という考え。
なるほど、関数を1や"string"などの値と同じものとみなすわけですね。


とすれば、関数も他の値と同じように関数の引数に出来ることにも違和感はないですね。
もともとC言語でも関数ポインタを渡したりしているので、違和感は感じませんでした。


おぉ、また関数の型が出てきた。

map :: (a -> b) -> [a] -> [b]


だいぶ慣れてきたかなぁ。この本読む前だったら、意味が分からなかったと思う。

if式について

ifじゃなくてif
文じゃなくて式だから、必ず値を持つ。なるほど。これは重要かも。

二項演算子について

過去に演算子に関して、ちょっとだけ調べましたが、ここに載ってましたね。
関数名を()でくくると二項演算子になる。

(==) :: a -> a -> Bool


ということは

if == 1 1 then "True" else "False"


という使い方も出来るのかな?
…出来ないみたい。括弧を付け加えればいけるかな?

if (== 1 1) then "True" else "False"


だめみたい。二項演算子は中置でしか使えないんですね。
そしてまた関数の型が。

concat :: [[a]] -> [a]


うんうん、分かります、分かります。楽しくなってきた♪