Define even using mod instead of rem
Summary
even and odd are defined in GHC.Real as
even, odd :: (Integral a) => a -> Bool
even n = n `rem` 2 == 0
odd = not . even
For an Int, which is probably the most common use case, even compiles to remInt# x 2# in core and a bunch of instructions in asm.
If we use mod instead, it compiles to andI# x 1# which is far simpler.
Haskell playground link: https://play.haskell.org/saved/m7xZGpaS
So, should even be defined using mod instead? Is rem better for any common non-Int integral types?