我试图掌握这两个概念之间的关系。
首先考虑一个抽象数据类型的例子:
data Tree a = Nil
| Node { left :: Tree a,
value :: a,
right :: Tree a }
根据 Haskell 维基:
这种类型是抽象的,因为它未定义其结构的某些方面,由数据类型的用户提供。这是抽象数据类型的弱形式。资源
现在考虑参数多态性的概念:
参数多态性是指当一个值的类型包含一个或多个(无约束的)类型变量时,该值可以采用通过用具体类型替换这些变量而产生的任何类型。--来源
这里id :: a -> a
给出了一个例子:
例如,函数
id :: a -> a
在其类型中包含一个不受约束的类型变量 a
问题:这两个概念之间的形式关系是什么?特别是,抽象数据类型的所有实例也是参数多态性的实例吗?反过来呢?