我是Haskell的新手,我来自c ++背景。
我在理解类型和类型类之间的关系时遇到了一些麻烦。
据我所知,类型类指定了一堆函数。与Eq
类型类一样,指定==
和/=
。
但是现在假设我有一个类型t
,当我说t
是Eq
类型类的实例时,它是什么意思。它只是意味着t
支持并实现Eq
指定的函数吗?
答案 0 :(得分:6)
它是否只是意味着t支持并实现了Eq?
指定的函数
是的,确切地说。
它只是意味着Eq t
的实例根据(==)
的要求定义了运算符Eq
。因此,您可以在代码中的t
类型上使用所述运算符。
一个愚蠢的例子:
data MyPair = P Int String
instance Eq MyPair where
(P i1 s1) == (P i2 s2) = -- we define equality ...
i1==i2 && s1==S2 -- ... as component-wise equality
testTrue :: Bool
testTrue = (P (1+1) "aa") == (P 2 ("a"++"a"))
在上面的例子中,常见的习语实际上是
data MyPair = P Int String deriving Eq
自动派生实例 - 所以不需要明确地编写它。