Haskell-型クラス

型クラスについて

型クラスとは

型クラスとは、型の振る舞いを定義するものです。

オブジェクト指向におけるクラスとは概念が異なり、Interfaceや抽象クラスに相当します。


class 型クラス 型 where
 条件式

インスタンスとは

インスタンスとは、型クラスの制約を満たすように定義した型のことです。

オブジェクト指向におけるインスタンス(クラスの実体)とは概念が異なり、クラスの実装(Implement)に相当します


instance 型クラス 型 where
 条件式

型クラスのサンプル

入力データに対する型を表示します。


#!/usr/bin/env runghc

-- なにかを受け取って文字列を返す
class Myclass a where
    cfunc :: a -> String

-- 受け取りデータに対する実装
instance Myclass Char where
    cfunc _ = "Char"
instance Myclass Int where
    cfunc _ = "Int"
instance Myclass Bool where
    cfunc _ = "Bool"

func :: (Myclass a) => a -> String
func x = cfunc x

main = do print $ func (100::Int)
          print $ func 'a'
          print $ func True

基本的な型クラス

よく使用する型クラスとインスタンスの例を記載します。


Eqクラス

Eqのインスタンスは、等価性検査の型に使われ、「==」や「/=」で比較できる型を表します。

Int、Bool、Charといった基本的なデータは全てEqのインスタンスとなります。


Prelude> :t (==)
(==) :: (Eq a) => a -> a -> Bool

Ordクラス

Ordのインスタンスは、順序を持った型に使われ、大小の比較ができることを保証する。

(<)、(<=)、(>)、(>=)の四つの比較関数は全て同一の型を持ちます。


Prelude> :t (>)
(>) :: (Ord a) => a -> a -> Bool

Showクラス

Showのインスタンスは、文字列表現を返します。

文字列表現を返すshow関数やprint関数は、Showのインスタンスです。


Prelude> :t show
show :: (Show a) => a -> String

derivingキーワード

derivingキーワードを使えば,Haskellが型クラスの文脈での振る舞いを自動導出します。


自動導出できるクラスは以下の通りです。

  • Eq
  • Ord
  • Enum
  • Bounded
  • Show
  • Read


data  Maybe a     =  Nothing | Just a  deriving (Eq, Ord, Read, Show)
data  Either a b  =  Left a | Right b  deriving (Eq, Ord, Read, Show)
data  Ordering    =  LT | EQ | GT deriving
                                  (Eq, Ord, Bounded, Enum, Read, Show)



関連ページ