类型类 - 简要说明

时间:2015-06-30 18:05:29

标签: haskell types typeclass

我是Haskell的新手,我来自c ++背景。

我在理解类型和类型类之间的关系时遇到了一些麻烦。

据我所知,类型类指定了一堆函数。与Eq类型类一样,指定==/=

但是现在假设我有一个类型t,当我说tEq类型类的实例时,它是什么意思。它只是意味着t支持并实现Eq指定的函数吗?

1 个答案:

答案 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

自动派生实例 - 所以不需要明确地编写它。