+ -- use "less than or equal to" so zero is a valid epsilon
+ | otherwise = abs (m !!! (i,j)) <= epsilon
+
+
+-- | Returns True if the given matrix is upper-triangular, and False
+-- otherwise. A specialized version of 'is_upper_triangular\'' with
+-- @epsilon = 0@.
+--
+-- Examples:
+--
+-- >>> let m = fromList [[1,0],[1,1]] :: Mat2 Int
+-- >>> is_upper_triangular m
+-- False
+--
+-- >>> let m = fromList [[1,2],[0,3]] :: Mat2 Int
+-- >>> is_upper_triangular m
+-- True
+--
+-- TODO:
+--
+-- 1. The Ord constraint is too strong here, Eq would suffice.
+--
+is_upper_triangular :: (Ord a, Ring.C a, Absolute.C a, Arity m, Arity n)
+ => Mat m n a -> Bool
+is_upper_triangular = is_upper_triangular' 0