diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs index 443a7ea0a9aad0b703cea8c92db0270e163ea65c..cb9d32d526a42585246015a0f4d9e281af3c364c 100644 --- a/compiler/iface/MkIface.lhs +++ b/compiler/iface/MkIface.lhs @@ -1508,16 +1508,19 @@ tyConToIfaceDecl env tycon ifConUnivTvs = toIfaceTvBndrs univ_tvs', ifConExTvs = toIfaceTvBndrs ex_tvs', ifConEqSpec = to_eq_spec eq_spec, - ifConCtxt = tidyToIfaceContext env3 theta, - ifConArgTys = map (tidyToIfaceType env3) arg_tys, + ifConCtxt = tidyToIfaceContext env2 theta, + ifConArgTys = map (tidyToIfaceType env2) arg_tys, ifConFields = map getOccName (dataConFieldLabels data_con), ifConStricts = dataConStrictMarks data_con } where (univ_tvs, ex_tvs, eq_spec, theta, arg_tys, _) = dataConFullSig data_con - (env2, univ_tvs') = tidyTyClTyVarBndrs env1 univ_tvs - (env3, ex_tvs') = tidyTyVarBndrs env2 ex_tvs - to_eq_spec spec = [ (getOccName (tidyTyVar env3 tv), tidyToIfaceType env3 ty) + + -- Start with 'emptyTidyEnv' not 'env1', because the type of the + -- data constructor is fully standalone + (env1, univ_tvs') = tidyTyVarBndrs emptyTidyEnv univ_tvs + (env2, ex_tvs') = tidyTyVarBndrs env1 ex_tvs + to_eq_spec spec = [ (getOccName (tidyTyVar env2 tv), tidyToIfaceType env2 ty) | (tv,ty) <- spec]