Я определил тип
data Expr =
Const Double
| Add Expr Expr
| Sub Expr Expr
и объявил его экземпляром класса типов Eq
:
instance Eq Expr where
(Add (Const a1) (Const a2)) == Const b = a1+a2 == b
(Add (Const a1) (Const a2)) == (Add (Const b1) (Const b2)) = a1+a2 == b1 + b2
. Конечно, вычисление выражения Sub (Const 1) (Const 1) == Const 0
не удастся. Как я могу отладить во время выполнения процесс сопоставления с образцом, чтобы обнаружить его сбой? Я хотел бы посмотреть, как Haskell принимает аргументы ==
и проходит по шаблонам. Это вообще возможно?