top page > computer > haskell > web_lecture > for_programmer > boollike_basic_types.html
更新日:
文責: 重城良国

基本的な型を型クラスBoolLikeのインスタンスにする

(工事中 90%)

boolLike.hs

はじめに

基本的な型を型クラスBoolLikeのインスタンスにする。以下の型を扱う。

(), Bool, Int, Integer, Float, Double, Char

型()を覚えているだろうか。これはユニット型と呼ばれる型である。型Boolはふたつの値False, Trueを持つが型()はひとつの値()だけを持つ。型Floatは浮動小数点数だ。型Doubleが倍精度浮動小数点数である。

Falseになるもの

基本的な型のなかでFalseになるものをもう一度列挙する。

型Integer

型Integerでは値0だけがFalseとなりそれ以外はTrueとなる。つまり以下のような関数toBoolを定義すれば良い。

toBool 0 = False
toBool _ = True

クラス関数を実装するときは型が型クラスのインスタンスであることを明示する。

instance BoolLike Integer where
toBool 0 = False
toBool _ = True

% ghci boolLike.hs
*Main> toBool 8
True
*Main> toBool 0
False
*Main> toBool (- 3)
True

型Char

文字については'\0'と'0'のみがFalseなので

instance BoolLike Char where
toBool '\0' = False
toBool '0' = False
toBool _ = True

となる。

*Main> :reload
*Main> toBool 'c'
True
*Main> toBool '\0'
False
*Main> toBool '0'
False
*Main> toBool ' '
True

型Bool

型Boolはそのままで良いので

instance BoolLike Bool where
toBool = id

型()

ユニット型()はひとつのユニット値()のみを持つので

instance BoolLike Bool where
toBool () = False

としても良いしワイルドカードを使って

toBool _ = False

としても良い。

試してみる

*Main> :reload
*Main> toBool ()
False
*Main> toBool True
True
*Main> toBool 3
True
*Main> toBool 0
False
*Main> toBool '0'
False

構文

型を型クラスのインスタンスにするには

instance 型クラス名 型名 where
クラス関数1の定義
クラス関数2の定義
...

のようにする。

まとめ

型を型クラスのインスタンスにするためにはクラス関数をそれぞれの型に合わせて定義する。

課題

  1. 型Int, Float, Doubleを型クラスBoolLikeのインスタンスにせよ

「型クラスBoolLike」へもどる 「アドホック多相関数iff」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics