Get rid of unused part of the type error message
Properly unify constrained variables, serious changes here!!!

I also rewrote merge1 and merge2 which are dangerous functions to touch.