gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:17:34 28 4
gpt4 key购买 nike

试图从我在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com