gpt4 book ai didi

haskell - 使用 `elem' 没有产生 (Eq TrafficLight) 的实例 可能的修复 : add an instance declaration for (Eq TrafficLight)

转载 作者:行者123 更新时间:2023-12-02 17:03:19 26 4
gpt4 key购买 nike

我有一个来自 Learn You a Haskell for Great Good 的示例,名为

class Eq1 a where
(===), (=/=) :: a -> a -> Bool
x === y = not $ x =/= y
x =/= y = not $ x === y

data TrafficLight = Red | Yellow | Green

instance Eq1 TrafficLight where
Red === Red = True
Green === Green = True
Yellow === Yellow = True
_ === _ = False


instance Show TrafficLight where
show Red = "Red light"
show Yellow = "Yellow light"
show Green = "Green light"


main = do
print $ Red === Red
print $ Red === Yellow
print $ [Red, Yellow, Green]
print $ Red `elem` [Red, Yellow, Green]

前三行有效,但最后一行包含 elem 无效,出现错误:

 No instance for (Eq TrafficLight) arising from a use of `elem'
Possible fix: add an instance declaration for (Eq TrafficLight)
In the second argument of `($)', namely
`Red `elem` [Red, Yellow, Green]'

我正在寻找解决方案,如何为标记部分添加实例,但没有找到有关该主题的提示,我是 Haskell 新手,所以提前致谢

塔马斯

最佳答案

您必须提供自己的elemelem 的类型是什么?

elem :: Eq a => a -> [a] -> Bool

但是,您的交通灯没有 Eq 实例。它有一个 Eq1 实例。

您必须编写自己的elem1:

elem1 :: Eq1 a => a -> [a] -> Bool
elem1 y xs = -- exercise

关于haskell - 使用 `elem' 没有产生 (Eq TrafficLight) 的实例 可能的修复 : add an instance declaration for (Eq TrafficLight),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315070/

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