fugafuga.write

日々のログ

すごいH本 part44

Ord 型クラスの話

順序付け可能な型のための型クラス Ord の話。

同じ型の値を2つ比較したとき、その2つが異なる値コンストラクタから生成されているなら先に定義されているほうが小さいとみなされる。

*Main> True > False
True
*Main> True < False
False

これは、Falseの値コンストラクタが先に定義されているから。

2つの値が同じ値コンストラクタでできている場合は、フィールドがなければ等値。フィールドがあれば、フィールド同士が比較されて大小判定される。

*Main> Nothing < Just 100
True
*Main> Nothing < Just (-99999999)
True
*Main> Just 3 `compare` Just 2
GT
*Main> Just 100 > Just 50
True

Just (*3) > Just (*2)はできない。なぜなら、関数は型を持ち、Ordのインスタンスではないから。

Enum, Bounded 型クラスの話

曜日を表すデータ型

data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday

このデータ型は全ての値コンストラクタが引数をとらないので、Enum型クラスに属させることができる。Enum は、前者関数と後者関数を持つ型のための型クラスです。また、Day は上限と下限をもつ型のクラスである Bounded のインスタンスにもできる。

型クラスのバーゲンセールをしてゆく。

data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
            deriving (Eq, Ord, Show, Read, Bounded, Enum)

実行

*Shapes> Wednesday
Wednesday
*Shapes> show Wednesday
"Wednesday"
*Shapes> read "Saturday" :: Day
Saturday
*Shapes> Saturday == Sunday
False
*Shapes> Saturday == Saturday
True
*Shapes> Saturday > Friday
True
*Shapes> Monday `compare` Wednesday
LT
*Shapes> minBound :: Day
Monday
*Shapes> maxBound :: Day
Sunday

他にも

*Shapes> succ Monday
Tuesday
*Shapes> pred Saturday
Friday
*Shapes> [Thursday .. Sunday]
[Thursday,Friday,Saturday,Sunday]
*Shapes> [minBound .. maxBound] :: [Day]
[Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday]

所感

東京が大雪とのこと。

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

  • 作者: MiranLipovaca
  • 出版社/メーカー: オーム社
  • 発売日: 2017/07/14
  • メディア: Kindle版
  • 購入: 4人 クリック: 9回
  • この商品を含むブログを見る