この 2 つの概念の関係を把握しようとしています。
まず、 Abstract Data Typeの例を考えてみましょう:
data Tree a = Nil
| Node { left :: Tree a,
value :: a,
right :: Tree a }
Haskell wikiによると:
この型は、データ型のユーザーによって提供される構造のいくつかの側面を未定義のままにするため、抽象的です。これは抽象データ型の弱い形式です。ソース
ここで、パラメトリック ポリモーフィズムの概念を考えてみましょう。
パラメトリック ポリモーフィズムとは、値の型に 1 つ以上の (制約のない) 型変数が含まれている場合を指します。そのため、値は、それらの変数を具象型に置き換えた結果の任意の型を採用できます。--ソース
以下に例を示しid :: a -> a
ます。
たとえば、関数
id :: a -> a
の型に制約のない型変数 a が含まれている
質問:これら 2 つの概念の正式な関係は何ですか? 特に、抽象データ型のすべてのインスタンスは、パラメトリック ポリモーフィズムのインスタンスでもありますか? 逆はどうですか?