パラメトリック多相
Genericsのこと
単一の関数が、複数の型で使用できる
実装は全く同じ、意味的にも同じ。型が異なるだけ。
わかりやすく最も単純な例は恒等関数id
一つの式が持つ複数の型のパターンがパラメータを使って統一的に表せる
パラメトリック多相を使って型制約を施すときは、他の多相と関連付けて用いられたりする
パラメトリック多相のわかり易い例は恒等関数
これはどんな型の値を引数にとっても同じパターンでそれをそのまま返す
id :: a -> a
aの型が何かについて何も考えずに同じパターンを適用できる
動的型付きの言語にもそのまま代替できる感じ
これを無駄にoverloadで実装したとしても、名前が異なるだけで内部実装が全く同じ、という感じになる
code:hs
-- 許容する型はそれぞれ異なるが、実装は全く同じ
idBool :: Bool -> Bool
idBool a = a
idInt :: Int -> Int
idInt a = a
特殊状況でのAd Hoc多相とも見ることができる気がするmrsekut.icon ex.
Haskellの型変数
C++のtemplate
Javaのジェネリクス
Adaのgeneric
MLの型スキーム
関連