- -- Following chks for zero divisor are non-standard (WDP)
- a `quot` b = if b /= 0
- then a `quotInt` b
- else error "Prelude.Integral.quot{Int}: divide by 0"
- a `rem` b = if b /= 0
- then a `remInt` b
- else error "Prelude.Integral.rem{Int}: divide by 0"
-
- x `div` y = x `divInt` y
- x `mod` y = x `modInt` y
-
- a `quotRem` b = a `quotRemInt` b
- a `divMod` b = a `divModInt` b
+ a `quot` b
+ | b == 0 = divZeroError
+ | a == minBound && b == (-1) = overflowError
+ | otherwise = a `quotInt` b
+
+ a `rem` b
+ | b == 0 = divZeroError
+ | a == minBound && b == (-1) = overflowError
+ | otherwise = a `remInt` b
+
+ a `div` b
+ | b == 0 = divZeroError
+ | a == minBound && b == (-1) = overflowError
+ | otherwise = a `divInt` b
+
+ a `mod` b
+ | b == 0 = divZeroError
+ | a == minBound && b == (-1) = overflowError
+ | otherwise = a `modInt` b
+
+ a `quotRem` b
+ | b == 0 = divZeroError
+ | a == minBound && b == (-1) = overflowError
+ | otherwise = a `quotRemInt` b
+
+ a `divMod` b
+ | b == 0 = divZeroError
+ | a == minBound && b == (-1) = overflowError
+ | otherwise = a `divModInt` b