Remove knot-tying bug in TcHsSyn.zonkTyVarOcc

Authored by simonpj on Aug 31 2018, 5:33 AM.


Remove knot-tying bug in TcHsSyn.zonkTyVarOcc

There was a subtle knot-tying bug in TcHsSyn.zonkTyVarOcc, revealed
in Trac Trac #15552.

I fixed it by

  • Eliminating the short-circuiting optimisation in zonkTyVarOcc, instead adding a finite map to get sharing of zonked unification variables.

    See Note [Sharing when zonking to Type] in TcHsSyn
  • On the way I /added/ the short-circuiting optimisation to TcMType.zonkTcTyVar, which has no such problem. This turned out (based on non-systematic measurements) to be a modest win.

    See Note [Sharing in zonking] in TcMType

On the way I renamed some of the functions in TcHsSyn:

  • Ones ending in "X" (like zonkTcTypeToTypeX) take a ZonkEnv
  • Ones that do not end in "x" (like zonkTcTypeToType), don't. Instead they whiz up an empty ZonkEnv.