【Haskell】 言葉の定義まとめ(型クラス、型コンストラクタ、値コンストラクタ、型引数など)
環境 ghc 7.8.3 CentOS7.0
「すごいHaskellたのしく学ぼう!」第07章 メモ
この辺で、言葉の定義がよくわからなくなっていたので、まとめてみた。
言葉 | 説明 | 例 |
---|---|---|
型変数 | 関数の明示的な型宣言に使われる どんな型も取り得る事を意味する |
head :: [a] -> a この「a」の事を型変数とよぶ |
型クラス | 何らかの振る舞いを定義するインターフェース | class Eq a where この「Eq」を型クラスと呼ぶ |
インスタンス | 型クラスが記述する振る舞いを実装したもの | instance Eq a where 型aをEqのインスタンスとして実装する |
型クラス制約 | 関数定義の際に、型変数に対して型クラスのインスタンスである事を定義する | (==) :: Eq a => a -> a -> Bool このとき「Eq a =>」が型クラス制約となる aはEq型クラスのインスタンスである必要がある |
型注釈 | 式が取るべき型を、明示的に指示する事 | read "5" :: Int 「:: Int」の部分を型注釈とよぶ |
データ型 | Bool, Int, Char, Maybeなど、データを扱うための形式を定めたもの | data Bool = False | True Boolデータ型の定義 |
値コンストラクタ | データ型定義の、実際に型が取り得る値の種類を指定する | data Bool = False | True この「=」の右側を値コンストラクタと呼ぶ |
型コンストラクタ | データ型定義で、型を引数に取って新しい型をつくる この引数は型引数と呼ばれる |
data Bool = False | True この「=」の左側を型コンストラクタと呼ぶ |
型引数 | 型コンストラクタがとる引数 | data Maybe a = Nothing | Just a この「a」の事を型引数とよぶ |
型シノニム | ある(データ)型に別名をつける事ができる | type String = [Char] この「String」が型シノニム |
型 | 単純に型と呼んだときは、データ型の事 |
▽関数定義
-- 型クラス制約 -- ↓ fn :: Eq a => [a] -> a -- ↑ -- 型変数 fn ... -- 実装
▽データ型定義
-- 型コンストラクタ 値コンストラクタ -- ↓ ↓ data Maybe a = Nothing | Just -- ↑ -- 型引数
▽型シノニム
type String = [Char] -- ↑ -- 型シノニム
▽型注釈
read "5" :: Int -- ↑ -- 型注釈
▽型クラス定義
class Foo a where (:-:) :: a -> a -> Bool -- 記号関数の場合は丸括弧で括る bar :: a -> a -> Bool
▽インタンス化
-- 型クラス定義にある関数を全て実装する事で、 -- あるデータ型を、型クラスのインタンスとする事ができる instance Foo (Maybe m) where (:-:) (Just _) = True (:-:) Nothing = False bar (Just _) = False bar Nothing = True -- この型引数「a」に対して型クラス制約を以下のように入れる事もできる instance (Eq m) => Foo (Maybe m) where (:-:) (Just _) = True (:-:) Nothing = False bar (Just _) = False bar Nothing = True