gpt4 book ai didi

Haskell:没有因使用 `==' 而产生的 (Eq a) 实例 在表达式中:(b == c)

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

所以,我在 haskell 上迈出了第一步,我在类里面被要求定义“elem”函数。这是我的第一个想法:

elemento :: a -> [a] -> Bool
elemento b listab = foldl (||) False (map (esIgual b) listab)

esIgual :: a -> a -> Bool
esIgual b c = (b == c)

结果为

elem (parcialito).hs:5:18: No instance for (Eq a) arising from a use of =='
In the expression: (b == c)
In an equation for
esIgual': esIgual b c = (b == c)

我认为这与 b 和 c 没有被识别为“Eq a”类型或类似的东西有关,但正如我所说,我还处于起步阶段。有什么想法吗?

最佳答案

我不会解释 type classes (你应该阅读一些 haskell 教程来了解这一点)但基本思想是,正如你所说,为了在 bc,它们都是 a 类型,您需要一些保证,即该类型的 == 函数已实现。在 haskell 中,我们称之为“类型约束”,我们将其写为:

esIgual :: Eq a => a -> a -> Bool
esIgual b c = (b == c)

请注意,您可以省略 esIgual 的类型注释,编译器会为您推断出它。尽量只写

esIgual b c = (b == c)

然后将文件载入 GHCI 并输入:

:t esIgual

您还需要在 elemento 中添加约束,因为它使用的是 isIgual:

elemento :: Eq a => ...

检查一下:http://learnyouahaskell.com/types-and-typeclasses#typeclasses-101 :) 第一个例子正是关于==

关于Haskell:没有因使用 `==' 而产生的 (Eq a) 实例 在表达式中:(b == c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329735/

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