aligned non-unifiable types in error messages
A simple example is:
f :: (a, (b, Bool)) -> Int f _ = 9 g = f (0.0, (1, 2))
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.