类型类 - 简要说明

Ane*_*ime 2 haskell types typeclass

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

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

据我所知,类型类指定了一堆函数.就像Eq类型类指定==/=.

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

chi*_*chi 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"))
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,常见的习语实际上是

data MyPair = P Int String deriving Eq
Run Code Online (Sandbox Code Playgroud)

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

  • @AneeshDandime请记住,如果你有类似`Eq a => [a]`(实现`Eq`的值列表),列表仍然是同类的.在OOP语言中,您可以将不同的类"转发"到"Eq接口"并将它们全部存储在相同的结构中,但不能存储在Haskell中,必须手动执行向下转换. (4认同)