haskell - 抽象数据类型上的 Eq 给出错误(haskell)

标签 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 不是类型而是类型类。对于类型类,您应该使用 => 而不是 ->

您还需要添加一个 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/

相关文章:

haskell - 模块名称不明确 `Prelude'

list - 重复调用函数: Haskell

Haskell 实现行列式、秩和逆矩阵计算 - 输入矩阵大小限制

performance - 如何在 Haskell 中将大数据 block 解析到内存中?

string - Haskell 中的解析函数,制作 map 函数时遇到麻烦

haskell - 混合 Threepenny-Gui 和 StateT

haskell - 使用 cabal 和 ghc 构建运行时标志

haskell - GHC 可以解压严格数据字段的枚举吗?

haskell - Yesod 系统要求是什么?

haskell - 哪些编程语言有类似 Haskell 的 `newtype`