classキーワード
型クラスの定義
Haskellでは等号、非等号を表すためにEq
というクラスを使用しています。
class Eq a where (==), (/=) :: a -> a -> Bool x == y = not (x /= y) x /= y = not (x == y)
上記のEq
クラスから以下の情報が読み取れます。
- 等号が使用可能な型は、
Eq
を継承している - それぞれの型は、
==
と/=
メソッドが実装される。 ==
と/=
は二つの同じ型を取り、最終的にBool
が返される。- デフォルトで、
==
と/=
が定義されているが、それぞれが依存関係にあるため、どちらかのメソッドは定義しなければならない
上記のEq
クラスを使用して新しい型とそれに対する制約を作ります。
instance キーワード
それでは、Eq
クラスを使用して新しい型User
を作ります。
型クラスUser
が同一人物かどうかを判断するためにEq
クラスを継承,インスタンス宣言します。
data User = User Int Name instance Eq User where (User id username ) == (User id' username') = id == id` && username == username' main do print( (User 10 "tanaka") == (User 20 "nakata") ) -- false print( (User 10 "tanaka") /= (User 20 "nakata") ) -- true print( (User 10 "tanaka") == (User 10 "tanaka") ) -- true