-
Simon Peyton Jones authored
We were generating them from the tcg_tcs field of the TcGblEnv, but that goes badly wrong when there are top-level Template Haskell splices, because the tcg_tcs field grows successively. If we generate record-selector binds for all the TyCons in the accumulated list, we generate them multiple times for TyCons earlier in the program. This what was happening in Trac #5665: data T = T { x :: Int } $(f 4) -- Top level splice ..more code.. Here the record selector bindings for T were being generated twice. Better instead to generate the record-selector bindings in TcTyClsDecls, right where the new TyCons are being declared (as indeed they were some time ago). This pushed me into doing some refactoring: instead of returning the record bindings, tcTyAndClassDecls adds them to the tcg_binds field of the TcGblEnv. I think the result is a bit nicer, and it has the additional merit of working.
ac11b1f1