[Haskell] Typing unification algorithm for parameterized types using GADTs?