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

多相関数とは

複数の型を扱う

多相関数とは

のどちらかまたは両方である関数だ。

2種類の多相関数

多相性にはパラメトリック多相とアドホック多相がある。アドホック多相は型クラスによる多相性だ。まずはパラメトリック多相を学ぶ。

パラメトリック多相

構造に作用し、なかの値の型を問わないのがパラメトリック多相だ。関数fromMaybeはMaybe型の値からなかの値をとりだす。第1引数にデフォルト値を第2引数にMaybe値を与える。

% ghci
Prelude> :m Data.Maybe
Prelude Data.Maybe> fromMaybe 0 (Just 123)
123
Prelude Data.Maybe> fromMaybe 0 Nothing
0

Just値からはなかの値をとりだす。Nothingならデフォルト値を返す。この操作はMaybeに包まれる値の型を問わない。

fromMaybe :: a -> Maybe a -> a

aは型変数だ。型変数には小文字からはじまる識別子が使われる。どの型をいれても良い。同じ型変数には同じ型がはいる。

Integer -> Maybe Integer -> Integer
Char -> Maybe Char -> Char
Bool -> Maybe Bool -> Bool

同じ型変数に異なる型をいれてはいけない。

Integer -> Maybe Bool -> Char (これはだめ)

制御構造として

多相関数は値自体ではなく構造を扱う。多相関数が実現する機能は多くの言語で制御構造として特殊な構文となる。Haskellでは制御構造を関数として定義できる。

まとめ

なかの値ではなく構造を扱う関数は多相関数として定義できる。多くは高階関数だ。広い用途に使える制御構造を特殊な構文ではなく関数として定義できる。

「モジュールの読み込み」へもどる 「Maybe値からの値の取り出し」へ

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