すごいH本1

4章まで読んだ。

読んでてへぇとなったとことか疑問に思ったとこのメモ
・rangeよくわからん(後述)
・リスト内包表記って、この書き方は集合の内包表記とは言わないってどっかで見た。
 あと<-が∈らしいのどっかで見たけどそれはちょっとおもしろかった(この本関係ない)
・一番最初のパターンマッチの例で、任意パターンの部分が

lucky x = "(なんか文字列)"

だったけど、ファイル先頭に{-# OPTIONS -Wall -Werror #-}をつけたら
Defined but not used: ‘x’って怒られた。

lucky _ = "(なんか文字列)"

なら怒られなかった。あのオプションうるさいのでもうつけない(だめそう)
・最初の例からパターンマッチのことをswitch-caseと思ってたけど、リストの例とかwhereの例見てると混乱してきた。そもそも左辺の形に合うように変数を割り当ててて、どうしても合わないのはスルーって感じかな。
・↑で混乱したのでリスト内包表記を関数の形で書けないかなって思ったけどよくわからなかった。
・takeとrepeatを用いてreplicateを実装するときに

take' n _
    | n<= 0 = []

を消したら終了しないよな、と思ったけど普通に終了して正しい結果がでた。なんで?
・リストとかrangeの型で混乱してた。
1. Matlabほんのちょっとやった癖で[1,5]を[1 5]みたいにしたら、その型が

[1 5] :: (Num t, Num (t -> a)) => [a]

でとてもびびった。まあ入力ミスなんですがこれなんなんでしょ。
2. [1 .. 15]の型が

[1 .. 15] :: (Num a, Enum a) => [a]

で、他、たとえば['a' .. 'w']とか[False .. True]、[LT .. GT]はそれぞれ[Char]、[Bool]、[Ordering]だったのでとても混乱した。多分[1 .. 15]の時点ではIntかDoubleか他なのかHaskellが決めかねてるのかなってことにした。
3. ..←これって演算子?型とかあるのかな。:t (..)もできなかったのでわからない。

今のとことても楽しい。難しくなった時に同じことが言えるかは知らん。