aligned non-unifiable types in error messages

A simple example is:

f :: (a, (b, Bool)) -> Int
f _ = 9

g = f (0.0, (1, 2))

This gives:

(v2,(v1,Bool))
(Real,(Int,Int))

For this simple type it doesn't matter of course, but for more complex types alignment would help:

(v2,   (v1,  Bool))
(Real ,(Int, Int ))

By the way, GHC gives this error:

Couldn't match expected type ‘Bool’ with actual type ‘Int’
    In the expression: 2 :: Int
    In the expression: (1, 2 :: Int)
    In the first argument of ‘f’, namely ‘(0.0, (1, 2 :: Int))’

Not sure if this is the way to go. I'd prefer coloring to indicate which sub-types match and which do not. Apart from this, alignment would be a good first step.