@@ -239,10 +239,8 @@ instance Eq e => Eq (Matrix e cols rows) where
239239 (One a) == (One b) = a == b
240240 (Junc a b) == (Junc c d) = a == c && b == d
241241 (Split a b) == (Split c d) = a == c && b == d
242− (Split (Junc a b) (Junc c d)) == (Junc (Split a' c') (Split b' d')) =
243− (a == a') && (b == b') && (c == c') && (d == d')
244− (Junc (Split a' c') (Split b' d')) == (Split (Junc a b) (Junc c d)) =
245− (a == a') && (b == b') && (c == c') && (d == d')
242+ x@(Split _ _) == y@(Junc _ _) = x == abideJS y
243+ x@(Junc _ _) == y@(Split _ _) = abideJS x == y
246244
247245instance Num e => Num (Matrix e cols rows) where
248246
@@ -250,28 +248,22 @@ instance Num e => Num (Matrix e cols rows) where
250248 (One a) + (One b) = One (a + b)
251249 (Junc a b) + (Junc c d) = Junc (a + c) (b + d)
252250 (Split a b) + (Split c d) = Split (a + c) (b + d)
253− (Split (Junc a b) (Junc c d)) + (Junc (Split a' c') (Split b' d')) =
254− Split (Junc (a + a') (b + b')) (Junc (c + c') (d + d'))
255− (Junc (Split a' c') (Split b' d')) + (Split (Junc a b) (Junc c d)) =
256− Split (Junc (a + a') (b + b')) (Junc (c + c') (d + d'))
251+ x@(Split _ _) + y@(Junc _ _) = x + abideJS y
252+ x@(Junc _ _) + y@(Split _ _) = abideJS x + y
257253
258254 Empty - Empty = Empty
259255 (One a) - (One b) = One (a - b)
260256 (Junc a b) - (Junc c d) = Junc (a - c) (b - d)
261257 (Split a b) - (Split c d) = Split (a - c) (b - d)
262− (Split (Junc a b) (Junc c d)) - (Junc (Split a' c') (Split b' d')) =
263− Split (Junc (a - a') (b - b')) (Junc (c - c') (d - d'))
264− (Junc (Split a' c') (Split b' d')) - (Split (Junc a b) (Junc c d)) =
265− Split (Junc (a - a') (b - b')) (Junc (c - c') (d - d'))
258+ x@(Split _ _) - y@(Junc _ _) = x - abideJS y
259+ x@(Junc _ _) - y@(Split _ _) = abideJS x - y
266260
267261 Empty * Empty = Empty
268262 (One a) * (One b) = One (a * b)
269263 (Junc a b) * (Junc c d) = Junc (a * c) (b * d)
270264 (Split a b) * (Split c d) = Split (a * c) (b * d)
271− (Split (Junc a b) (Junc c d)) * (Junc (Split a' c') (Split b' d')) =
272− Split (Junc (a * a') (b * b')) (Junc (c * c') (d * d'))
273− (Junc (Split a' c') (Split b' d')) * (Split (Junc a b) (Junc c d)) =
274− Split (Junc (a * a') (b * b')) (Junc (c * c') (d * d'))
265+ x@(Split _ _) * y@(Junc _ _) = x * abideJS y
266+ x@(Junc _ _) * y@(Split _ _) = abideJS x * y
275267
276268 abs Empty = Empty
277269 abs (One a) = One (abs a)
@@ -288,10 +280,8 @@ instance Ord e => Ord (Matrix e cols rows) where
288280 (One a) <= (One b) = a <= b
289281 (Junc a b) <= (Junc c d) = (a <= c) && (b <= d)
290282 (Split a b) <= (Split c d) = (a <= c) && (b <= d)
291− (Split (Junc a b) (Junc c d)) <= (Junc (Split a' c') (Split b' d')) =
292− (a <= a') && (b <= b') && (c <= c') && (d <= d')
293− (Junc (Split a' c') (Split b' d')) <= (Split (Junc a b) (Junc c d)) =
294− (a <= a') && (b <= b') && (c <= c') && (d <= d')
283+ x@(Split _ _) <= y@(Junc _ _) = x <= abideJS y
284+ x@(Junc _ _) <= y@(Split _ _) = abideJS x <= y
295285
296286-- Primitives
297287