输入 类 - 简要说明

Type classes - Brief Explanation

我是 Haskell 的新手,我有 C++ 背景。

我在理解类型和类型 classes 之间的关系时遇到了一些问题。

据我了解,type classes 指定了一堆函数。像 Eq 类型 class 指定 ==/=.

但现在假设我有一个类型 t,当我说 tEq 类型 class 的实例时,这意味着什么?是否仅仅意味着 t 支持并实现了 Eq 指定的功能?

Does it simply mean that t supports and implements the functions specified by 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

自动派生实例 -- 因此无需显式编写。