我正在努力理解这两个概念之间的关系。
首先考虑一个抽象数据类型的例子:
根据 Haskell 维基百科:
这种类型是抽象的,因为它留下了一些结构方面的未定义之处,需要数据类型的用户提供。这是一种较弱的抽象数据类型。来源 现在考虑参数多态的概念:
参数多态是指值的类型包含一个或多个(无约束的)类型变量,使得该值可以采用任何由将这些变量替换为具体类型而产生的类型。-- 来源 这里给出了一个
例如,函数
问题:这两个概念之间的正式关系是什么?特别地,所有的抽象数据类型实例是否也是参数多态性的实例?反之呢?
首先考虑一个抽象数据类型的例子:
data Tree a = Nil
| Node { left :: Tree a,
value :: a,
right :: Tree a }
根据 Haskell 维基百科:
这种类型是抽象的,因为它留下了一些结构方面的未定义之处,需要数据类型的用户提供。这是一种较弱的抽象数据类型。来源 现在考虑参数多态的概念:
参数多态是指值的类型包含一个或多个(无约束的)类型变量,使得该值可以采用任何由将这些变量替换为具体类型而产生的类型。-- 来源 这里给出了一个
id :: a -> a
的例子:例如,函数
id :: a -> a
在其类型中包含一个无约束的类型变量 a。问题:这两个概念之间的正式关系是什么?特别地,所有的抽象数据类型实例是否也是参数多态性的实例?反之呢?