[GHC] #15247: Use empty types for TTG extension constructors
GHC
ghc-devs at haskell.org
Fri Jun 8 13:38:18 UTC 2018
#15247: Use empty types for TTG extension constructors
-------------------------------------+-------------------------------------
Reporter: adamgundry | Owner: (none)
Type: task | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.5
Keywords: TTG | 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 happened to be looking at `AmbiguousFieldOcc` and noticed that it has
gained an `XAmbiguousFieldOcc` extension constructor for Trees That Grow,
but lots of the destructor functions in `HsTypes` panic if they see this
constructor (which is understandable, because they aren't expecting
extensions).
In general, perhaps it should be the case that for concrete phase
descriptors (e.g. `GhcRn`) where extension constructors are not expected,
the extension constructor argument type should be empty? It would then be
clear that they should not be expected (barring abuse of laziness) and
pattern matching on them could eliminate the empty type.
That is, instead of the existing
{{{#!hs
data NoExt = NoExt
type instance XXAmbiguousFieldOcc (GhcPass _) = NoExt
}}}
we would define
{{{#!hs
data NoExtConstructor -- empty data type
noExtConstructor :: NoExtConstructor -> a
noExtConstructor x = case x of {}
type instance XXAmbiguousFieldOcc (GhcPass _) = NoExtConstructor
}}}
and similarly for other `XX...` type families.
Alan, Shayan, is there any reason this couldn't work?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15247>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list