[GHC] #15579: topNormaliseType is wrong
GHC
ghc-devs at haskell.org
Thu Aug 30 08:56:15 UTC 2018
#15579: topNormaliseType is wrong
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: new
Priority: high | Milestone: 8.6.1
Component: Compiler | Version: 8.4.3
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
I’m very puzzled about topNormaliseTYpe_maybe. Here it is:
{{{
topNormaliseType_maybe env ty
= topNormaliseTypeX stepper mkTransCo ty
where
stepper = unwrapNewTypeStepper `composeSteppers` tyFamStepper
tyFamStepper rec_nts tc tys -- Try to step a type/data family
= let (args_co, ntys) = normaliseTcArgs env Representational tc tys
in
-- NB: It's OK to use normaliseTcArgs here instead of
-- normalise_tc_args (which takes the LiftingContext described
-- in Note [Normalising types]) because the reduceTyFamApp below
-- works only at top level. We'll never recur in this function
-- after reducing the kind of a bound tyvar.
case reduceTyFamApp_maybe env Representational tc ntys of
Just (co, rhs) -> NS_Step rec_nts rhs (args_co `mkTransCo` co)
_ -> NS_Done
}}}
I have two puzzlements
1. First, it seems utterly wrong to normalise the arguments using
Representational. Consider
{{{
F (N Int)
where newtype N x = [x]
}}}
We don’t want to reduce `(N Int)` to `[Int]`, and then try reducing `(F
[Int])`!! That is totally bogus. Surely we should use (the role-aware)
`normalise_tc_args` here?
2. I have literally no clue what `Note [Normalising types]` is all about.
Moreover there is no Lifting Context passed to `normalise_tc_args`, so I
don’t know what this stuff about `LiftingContext` is about. Is this
historical baggage?
Richard and I discussed this. (1) is a bug; for (2) the comment is
misleading and should be deleted.
Richard will do these things -- and will add examples to the mysterious
`Note [Normalising types]`
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15579>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list