我不明白列表减法中的类型类约束

时间:2018-06-24 00:40:06

标签: haskell typeclass

这是一个列表减法示例。

(\\) :: Eq a => [a] -> [a] -> [a]
[] \\ _  = []
xs \\ [] = xs
(x:xs) \\ (y:ys)
  | x == y    = xs \\ ys
  | otherwise = (x : (xs \\ [y])) \\ ys

首先,我不知道情商代表什么。

第二,在类型类约束中,a应该是[a]吗?因为输入必须是列表。

1 个答案:

答案 0 :(得分:5)

Eq是包含==的类型类。因此约束Eq a表示a必须是可以使用==进行比较的类型。

它是Eq a而不是Eq [a],因为我们希望能够比较列表中的元素,而不是列表本身(尽管如果这样做,我们仍然可以这样做,因为Eq a表示Eq [a])。