试图从我在 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
不是类型而是类型类。对于类型类,您应该使用 =>
而不是 ->
。
您还需要添加一个 k
来代表您调用 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
的参数。
编译器消息,“Expected a type, but 'Eq k' has kind 'Constraint'”,基本上是说 Eq k
不是一个类型,但你正在尝试使用它像一个类型。
关于haskell - 抽象数据类型上的 Eq 给出错误(haskell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66252739/