基本的な値

6.2 真偽値


Bool型はとても分かりやすい。
C言語のように0が偽で0以外が真というややこしいものではなくて、TrueとFalseしかないところがすっきりしてる。
こうあるべきですよね。関数not,(&&),(||)も馴染みのある感じですね。

6.3 数値

型の明示的宣言について

なるほどぉ、123はIntにも、Integer型にも、Float型にも、Double型にもなるんですね。
そのため、型を明示的に示したいときは、

15 :: Double


などと書く。この辺りはC言語と似てる。C言語ではもうちょっと機械的

15f    // float
12ul   // unsigned long


などサフィックスで書きます。
省略するとdouble型や、signed intになっちゃうとか面倒くさいところはありますが。


…ちょっと疑問が。じゃぁ、こんな感じにもかけるのかな?と思い試してみました。

Prelude> 1.5 :: Int

<interactive>:1:0:
    No instance for (Fractional Int)
      arising from the literal `1.5' at <interactive>:1:0-2
    Possible fix: add an instance declaration for (Fractional Int)
    In the expression: 1.5 :: Int
    In the definition of `it': it = 1.5 :: Int
Prelude> 


どうも1.5 :: Intはダメみたい。
1.5はFloatやDouble、Fractionalにはなるけど、Intにはならないようだ。
キャストではないんですね。

6.4 文字と文字列


特に難しいと思うことはありませんでした。すんなり理解出来ました。
toLower関数を文字列に適用するときはこんな感じですね。

Prelude Char> map toLower "ABCDEFG"
"abcdefg"
Prelude Char> 


なるほど、なるほど。
こうやってみるとmap関数ってHaskellの関数の中でもとても重要な部類に入る関数なのかなぁ、と思います。
リストの要素一つ一つに対して何か処理する、っていうのはよくあることですから。

6.5 タプル

ユニットについて

これまで何度か出てきた記述はユニットの()だったのかぁ。たとえば、

Prelude> :i putStr
putStr :: String -> IO () 	-- Defined in System.IO


というように、ここでの()は値を返さないの意味だったんですね。
putStrはIO処理(アクション)を返すけど、そのIO処理(アクション)は値を返さないわけですね。

タプル操作関数

この本では4つの関数が紹介されていました。
unzipが若干見失いそうになりますが、理解出来ました。