抽象数据类型上的方程给出错误(haskell)
试图从我在 Haskell 中创建的称为 Map 的抽象数据类型中删除一个元素,我使用相等来查看匹配的键,以便从 Map 中删除该元素
data Map k v = Map {pairs::[(k, v)]} deriving (Show)
removeElement :: Eq k -> Map k v -> Map k v
removeElement key (Map pairs) = Map [x |x <- pairs,not(fst x == key)]
给我错误:
main.hs:33:18: error:
* Expected a type, but `Eq k' has kind `Constraint'
* In the type signature:
removeElement :: Eq k -> Map k v -> Map k v
|
33 | removeElement :: Eq k -> Map k v -> Map k v
| ^^^^
<interactive>:3:1: error:
* Variable not in scope: main
* Perhaps you meant `min' (imported from Prelude)
根据我的理解,一旦建立了 Eq k,我就不必在其他任何地方,而且我无法真正理解编译器试图告诉我的内容,希望得到帮助。
回答
在 Haskell 中,Eq不是类型而是类型类。对于类型类,您应该使用=>而不是->.
您还需要添加 ak来代表您正在调用的参数key:
removeElement :: Eq k => k -> Map k v -> Map k v
removeElement key (Map pairs) = Map [x |x <- pairs,not(fst x == key)]
请注意,没有对应于 的参数Eq k。
编译器消息“期望一种类型,但 'Eq k' 具有类型的 'Constraint'”,基本上是说这Eq k不是一种类型,但您正试图像使用类型一样使用它。