## 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.

To upload designs, you'll need to enable LFS. More information