here's why it cannot be done:
data TwoByTwoMatrix = TTM Integer Integer Integer Integer
instance Num TwoByTwoMatrix where
fromInteger i = TTM i 0 0 i
(TTM a b c d) + (TTM e f g h) = TTM (a+e) (b+f) (c+g) (d+h)
negate m = (fromInteger (-1)) * m
(TTM a b c d) * (TTM e f g h) = TTM (b*g+a*e) (a*f+b*h) (d*g+c*e) (c*f+d*h)
It should follow that the above is a (non-abelian) ring, as required (all definitions follow the standard matrix addition/multiplication/addition convensions).
n = (TTM 0 1 0 0)
then: n * (n + 1) = n.
Since n has odd entries, it cannot be divided by 2 (more precisely: we cannot find an m s.t. n * 2 = m).
Best,
Sebastiaan