人気ブログランキング | 話題のタグを見る

RWH の読み方(44) 第6章

Real World Haskell 第6章 Using Typeclasses

Numeric Types

数の計算(+ などの演算子や sin などの関数)にタイプクラスが必要なのは不思議な感じがするが、ハスケルの扱える数の型の種類が数多いのを見ると必要性が分かる。

ちなみに列挙すると、Double, Float, Int, Int8, Int16, Int32, Int64, Integer, Rational, Word, Word8, Word16, Word32, Word64 がある。それらの詳細はRWHの表に詳しい。

これらの演算が全て同じ + 記号でできるのもタイプクラスのおかげだ。

Numeric クラスの演算子は括弧をつけることによって前置演算子に返ることができる。例えば 1 + 2 は (+) 1 2 と表記することが可能だ。

Numeric クラスの演算子や関数は非常に多いが、RWHに表でまとめてある。Numeric クラスのインスタンスの型は異なる者どうしの演算はできない。変換のための関数が用意してある。例えば Double -> Int は truncate, Int -> Double は fromIntegral などだ。異なる型のデータの演算はこれらで明示的に変換して行わないと型エラーになる。詳細は RWH に詳しい。

Equality, Ordering, and Comparisons

同等性の比較や、順序付けのためのタイプクラスがあり、それぞれ Eq, Ord が標準で定義してある。Eq クラスの演算子は == と /= で、Ord クラスには >=, <= などがある。

Automatic Derivation

deriving キーワードを使って自動的にクラスにインスタンスを登録する方法について書いてある。deriving キーワドの使い方については前回の記事でも実践してみた。全てのユーザ定義のデータが自動登録できるわけではなく、できないものもある。その場合は、手動で演算子や関数を定義しなければならない。

このあたりは、本文を読んでわかりにくいと思うところはない。記事が短くなってしまったが、次の Typeclasses at Work: Making JSON Easier to Use 以下は実践的なタイプクラスの活用法の記事になっているようなので、ここで一区切りとしておく。
by tnomura9 | 2012-05-16 13:31 | Haskell | Comments(0)
<< 名作コスプレ RWH の読み方(43) 第6章 >>