
#15470: Record projections with ambiguous types -------------------------------------+------------------------------------- Reporter: sweirich | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: 8.8.1 Component: Compiler | Version: 8.4.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): I forgot to put in the diff {{{ modified compiler/typecheck/TcTyDecls.hs @@ -893,7 +893,7 @@ mkOneRecordSelector all_cons idDetails fl | otherwise = map mk_match cons_w_field ++ deflt mk_match con = mkSimpleMatch (mkPrefixFunRhs sel_lname) [L loc (mk_sel_pat con)] - (L loc (HsVar noExt (L loc field_var))) + match_body mk_sel_pat con = ConPatIn (L loc (getName con)) (RecCon rec_fields) rec_fields = HsRecFields { rec_flds = [rec_field], rec_dotdot = Nothing } rec_field = noLoc (HsRecField @@ -905,6 +905,19 @@ mkOneRecordSelector all_cons idDetails fl sel_lname = L loc sel_name field_var = mkInternalName (mkBuiltinUnique 1) (getOccName sel_name) loc + match_body = L loc (HsVar noExt (L loc field_var)) +{- + match_body = foldl app_tv (L loc (HsVar noExt (L loc field_var))) field_tvs + + app_tv :: LHsExpr GhcRn -> TyVar -> LHsExpr GhcRn + app_tv hs_fun tv = L loc (HsAppType (mk_tv_ty tv) hs_fun) + + mk_tv_ty :: TyVar -> LHsWcType GhcRn + mk_tv_ty tv = mkEmptyWildCardBndrs $ L loc $ + HsTyVar noExt NotPromoted $ + L loc (getName tv) +-} }}} If you try commenting out the definition of `match_body` and replacing it with the one that is commented out in this diff, you get my attempt. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15470#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler