Haskell 用語集(型と型クラス周辺)

概要

型クラスとは型に関する性質を規定するための概念・仕組みである.型クラスを用いると,型に多相型の制約をつけることができる.つまり,ある型クラスが割り当てられた変数には,その型クラスの性質をもつ型によってのみ型付けができる.

型クラスは「クラスメソッド」によって特徴付けられる.例えば,Ordクラスというものがある.この型クラスは(<=)関数というクラスメソッドらによって特徴付けられている.

また,この型クラスで型付けられた変数には Ord クラスの性質を持つ型のみが型付けられる.つまり,ある型クラスの性質をもつ型とは,その型の型定義においてその型クラスのクラスメソッドを実装するものである.例えば,Ordクラスの性質を持つ型とは,その型がOrdクラスのクラスメソッドである(<=)関数らを実装する必要がある.

用語の説明

  • 型クラス(または,クラス)
    • 型に関する性質を規定するための概念・仕組み.型クラスを用いると,多相型に制約をつけることができる.つまり,ある型クラスが割り当てられた変数には,型クラスの性質をもつ型のみ型付けができる.型クラスは下記のクラスメソッドによって特徴付けられる.例えば,Eqクラスというものがある.この型クラスは(==)関数によって特徴付けられている.よって,この型クラスを指定された変数は Eq クラスである必要があり,つまり,(==)関数を実装する必要がある.
    • ref) Type class - Wikipedia
  • クラスメソッド
    • 型クラスを特徴付けるメソッド.
    • (例)Eq クラスにおける(==)関数
    • (例)Ord クラスにおける(≦)関数
  • 多重定義
    • 型ごとにクラスメソッドの実装を変えること
    • Int 型と [Int] 型はどいらも順序つけられそうなので,どちらもOrd クラスのインスタンスなってほしい.しかし,Int 型と [Int] 型で(<)関数を1つの実装でまかなえない.そのため,型ごと鬼クラスメソッドの実装を変える.例えば,Int 型のための(<)クラスメソッドの実装と,[Int]型のための(<)メソッドの実装を別にする.
  • 型クラスの継承
    • ある型クラスが,他のあるクラスを継承すること
    • 例)Ord クラスのインスタンスは Eq クラスを継承する.
  • class 宣言
    • 新しい型クラスを宣言する方法
    • 例)Eq クラス
class Eq a where 
   (==), (/=) :: a -> a -> Bool -- クラスメソッドの型宣言

   x == y = not (x /= y)   -- (==)クラスメソッドのデフォルトの実装
   x /= y = not (x == y)   -- (/=)クラスメソッドのデフォルトの実装
  • 継承を含む class 宣言
    • 新しい型クラスを宣言する際に,それが他のある型クラスを継承していることを宣言する方法
  • instance 宣言
  • deriving 宣言
    • instance 宣言の詳細を省略して,型を型クラスのインスタンスであると宣言する方法
  • 主要な型クラス
    • Eq クラス,Ord クラス,Show クラス