我有一个例子来自于了解你是一个很好的Haskell
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]
Run Code Online (Sandbox Code Playgroud)
并且前三行是有效的,但最后一行包含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]'
Run Code Online (Sandbox Code Playgroud)
我寻找解决方案如何为标记的部分添加实例,但没有找到关于该主题的提示,我是Haskell的新手,所以提前感谢
塔马斯
你必须提供自己的elem.什么是elem类型?
elem :: Eq a => a -> [a] -> Bool
Run Code Online (Sandbox Code Playgroud)
但是,您的红绿灯没有Eq实例.它有一个Eq1实例.
你必须自己写elem1:
elem1 :: Eq1 a => a -> [a] -> Bool
elem1 y xs = -- exercise
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |