Improve type errors
There's a few scenarios where incorrect code cause very long compilation errors of the form
"could not match [some rather long unreduced type thunk] with some other type ..."
The trick to improving these is to make a type family wrapper that is both polymorphic enough so that it always matches, but can detect the erroneous cases (generally done so far as a closed type family, case by case), then have this result to the built in TypeError when the error is detected. GHC will then print out this error message instead.