所以,我創建了一個數據型方程的交替情況模式匹配的
data Expr a = Const a
| Expr a :*: Expr a
我定義了一個實例Eq
對這種數據類型
instance (Eq m) => Eq (Expr m) where
Const a == Const b = a == b
(a :*: b) == (c :*: d) = ((a == c) && (b == d)) || ((a == d) && (b == c))
該定義是指順序並不重要當比較兩個表達式時。然而,當我使用模式匹配來寫一個函數,Expr
是我能不能只寫
f (Const 1 :*: a) = ...
而且必須寫
f (a :*: Const 1) = ...
爲了趕上所有的情況下,即使如果我在哪裏比較兩者使用(==)
它會返回true。
有沒有辦法只寫一個上面的表達式,讓Eq
的實例照顧其餘的?模式匹配是否使用或需要Eq
的實例?