私は「LearnYouaHaskell for GreatGood!」の助けを借りてHaskellを学んでいます。現在、型クラスとインスタンスを理解しようとしています。LYAHは、呼び出される型が次のように定義されている例を示しています。TrafficLight
data TrafficLight = Red | Yellow | Green
これは、次の動作を表示するTrafficLight
インスタンスであると想定されています。Eq
instance Eq TrafficLight where
Red == Red = True
Green == Green = True
Yellow == Yellow = True
_ == _ = False
これがどのように機能するかを理解するためにShop.hs
、の動作をオーバーライドしようとする場所という独自のファイルをEq
作成しましたItemSlot
。
module Shop where
type Number = Int
data Item =
BellPepper
| Cabbage
| Carrot
| Lettuce
| Onion
| Potato
| Tomato
deriving (Show, Read, Eq)
data ItemSlot = ItemSlot {
item :: Item,
number :: Number
} deriving (Show)
instance Eq ItemSlot where
((item a) == (item a)) = True -- line that contains the error
_ == _ = False
ただし、ファイルをGHCiにロードすると、次のエラーが発生します。
Prelude> :l Shop.hs
[1 of 1] Compiling Shop ( Shop.hs, interpreted )
Shop.hs:21:11: Parse error in pattern: item
Failed, modules loaded: none.
(正しい構文がここにあるかどうかについて、私はかなり混乱していることを認めなければなりません-それですか?item a
それとも単にitem
ですか?item
同じエラーで失敗するだけで、より多くの括弧を使用する-SOに関するこのような別の質問の答えのように-はしませんどちらかを助けるようです。)
item
で使用されているrecord-syntaxが提供する機能は使用できないと思いますItemSlot
が、それでも問題の解決方法がわかりません。