2017-02-18 4 views
2

私は(式TrafficLight)なしインスタンス:(式TrafficLight)のインスタンス宣言を追加

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] 

という名前グレートこだわりあなたを学びハスケルの例を持っていますそして最初の3行は仕事ですが、最後の行は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]' 

私はマークされた部分のためにインスタンスを追加することができますどのように解決策を探しますが、見つかりませんでしたトピックについてのヒント、私はハスケルで新しいですので、事前に感謝

Tamas

答えて

5

あなた自身でelemを提供する必要があります。 elemさんのタイプは何ですか?

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

ただし、交通信号灯にはEqインスタンスがありません。それはEq1インスタンスを持っています。

独自01​​を記述する必要があります。

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

おかげ@Zeta :) – bling5630

関連する問題