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]
所感
東京が大雪とのこと。

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