在Java中,我们可以从类中创建对象/实例。在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中,类系统是一种将相似对象进行分组的方法。类的实例是属于该类的单个对象。
在Haskell中,类系统(大致而言)是一种将相似的types分组的方法。 (这就是我们称它们为“类型类”的原因)。一个类的实例是属于该类的单个type。 (也就是说,直到您开始考虑多参数类型类为止。)>
顺便说一下,Haskell(单参数)类在某种程度上类似于Java接口,并且通过扩展类似于Java类。或者,Haskell实例类似于Java类。最好将其视为巧合。处理该术语时要牢记其数学渊源。一个类只是一堆属于在一起的东西,而实例就是其中之一。
如果您对类型类及其与Java接口的区别感兴趣,请阅读this post by <❤>。它还说明了实例。