在Haskell中,为什么在下面的函数之前使用Eq a => [a]很重要?

and*_*ndy 3 haskell functional-programming

我有这个功能

sameElts :: Eq a => [a] -> Bool 
Run Code Online (Sandbox Code Playgroud)

如果给定一个列表,当列表的所有元素相等时返回True,否则返回False.

例如:

sameElts [1,2] = False
sameElts [2,2] = True
sameElts [2] = True
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释Eq a =>对类型的代码片段的需求sameElts吗?我假设它强制类型为数字列表,以便使用equals运算符.

sth*_*lzm 8

所述Eq a =>代码段只是需要的类型a在类型类 Eq,这基本上意味着,必须有用于该类型的相等测试.这允许您使用==/=运算符.

例如,数字Eq通过标准库(Prelude)实现,但也有其他类型.您还可以创建自定义数据类型并自己定义相等性检查.这sameElts非常通用,因为它适用于任何类型Eq.

  • 重要的是,函数不在`Eq`中,所以如果你有一个像`[(+),( - ),(*),(/)] :: [Num a => a - > a - > a]这样的列表`,`sameElts`函数不起作用. (2认同)