我试图掌握这两个概念之间的关系。
首先考虑一个例子抽象数据类型:
data Tree a = Nil
| Node { left :: Tree a,
value :: a,
right :: Tree a }
根据哈斯克尔维基:
这种类型是抽象的,因为它未定义其结构的某些方面,由数据类型的用户提供。这是抽象数据类型的弱形式。Source https://wiki.haskell.org/Abstract_data_type
现在考虑这个概念参数多态性:
参数多态性指的是当一个值的类型包含一个或多个(不受约束的)类型变量时,因此该值可以采用用具体类型替换这些变量所产生的任何类型。 --Source https://wiki.haskell.org/Polymorphism#Parametric_polymorphism
这里有一个例子id :: a -> a
给出:
例如,函数id :: a -> a
其类型中包含无约束类型变量 a
问题:这两个概念之间的正式关系是什么?特别是,所有实例都是抽象数据类型还有实例参数多态性?反之又如何呢?
有两件事需要意识到。首先,你的例子Tree
实际上是一个参数型,这是一种特殊的抽象类型。第二,参数多态性可以是类型或函数。考虑到这两点,很明显抽象类型和参数多态性都不是对方的超集。然而,任何参数多态性这是一种类型也是一个抽象类型。换句话说,抽象类型are的超集参数多态类型(不知道他们是否真的这么叫)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)