0
私は作成したタイプの型クラスインスタンスを作成しようとしていますが、問題が発生しています。typeclassインスタンス宣言で定義とパターンマッチングが矛盾しています
data PlusMinus a = Plus a | Minus a | Zero
deriving(Eq,Show)
Essentialy我々は、3種類のデータコンストラクタを持っており、Num
のインスタンスは、これらの異なるコンストラクタに基づいて異なる動作をする必要があるタイプを持っています。それをここまで
instance (Ord a, Eq a,Num a) => Num (PlusMinus a) where
Plus a + Plus b = Plus (a + b)
Plus a - Plus b
| a > b = Plus (a - b)
| a == b = Zero
| a < b = Minus (b - a)
Plus a * Plus b = Plus (a * b)
abs (Plus a) = Plus (a)
signum (Plus a) = 1
fromInteger a
| a > 0 = Plus (fromInteger a)
| a == 0 = Zero
| a < 0 = Minus (fromInteger . abs $ a)
は、正常に動作し、そして期待のように振る舞うが、私は
Minus a + Minus b = Minus (a + b)
を追加したときに突然、私は私が+
のための矛盾の定義を持って聞いています。 なぜこれは関数定義のパターンマッチングのように機能しませんか? 同じ方法で動作しますか、私はちょうど何か間違っていますか?
エラー、そのようなインデントが正確ですか?つまり、すべてのパターンは互いに隣り合っていなければなりません。すべての 'k + v'、次にすべて' k-v'などとなります。 – Zeta
私は質問の字下げを修正する必要がありました。実際のコードは字下げされていました。私は線の順序を変更しようとします。ありがとう! –
ありがとう!それをしたのはラインオーダーでした。 'マイナスa +マイナスb ... 'を'プラスa +プラスb ...'の直下まで動かすと –