【发布时间】:2017-12-06 18:53:35
【问题描述】:
在面向对象的语言(例如 Java 和 Python)中,我们可以从类中创建对象/实例。 在 Haskell 中,我们可以从类型类中创建实例,例如:
data ShirtSize = S | M | L -- Here ShirtSize is a enum data-type
class MyEq a where
(==) :: a -> a -> Bool
instance MyEq ShirtSize where -- Here ShirtSize is an instance of the MyEq type-class
S == S = True
M == M = True
L == L = True
_ == _ = False
我的问题是: 实例在haskell中是什么意思? 在 java 中,我们可以从类中创建实例,但在 haskell 中,实例似乎是类型(如 ShirtSize),您可以在其上应用类型类函数(例如 MyEq 中的 (==) 函数)。我对吗?以及与 Java 中的实例/对象相比,Haskell 中的实例是什么?
【问题讨论】:
-
它更像是 Java 中的“
implements Interface”。 -
我认为你用“实例是类型(如 ShirtSize),你可以在其上应用类型类函数(例如来自 MyEq 的 (==) 函数)。”。在那之后几乎没有留给答案的余地。当我们回复时,是否还有更多的困惑可以发表评论?
-
阅读 learnyouahaskell.com/making-our-own-types-and-typeclasses 的 Typeclasses 102 部分我认为给出了非常好的描述
-
我觉得“instance”并不是说“可以实例化”,而是“这个类型是这个类型类的一个实例,所以可以使用它的方法”。
标签: haskell functional-programming typeclass