[GHC] #15421: Refactor (~) to reduce the superclass stack
GHC
ghc-devs at haskell.org
Fri Jul 20 07:31:05 UTC 2018
#15421: Refactor (~) to reduce the superclass stack
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner: (none)
Type: bug | Status: new
Priority: normal | 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:
-------------------------------------+-------------------------------------
Currently (see `Note [The equality types story]` in `TysPrim`) we have
{{{
-- Hetereogeneous equality
class a ~# b => a ~~ b
instance a ~# b => a ~~ b
-- Homogeneous equality
class a ~~ b => (a :: k) ~ (b :: k)
instance a ~~ b => a ~ b
}}}
Note that `(~#)` is a superclass of `(~~)`, and `(~~)` is a superclass of
`(~)`. This means that in the common case of using `(~)` we need two
superclass selections to get to the `(~#)` we want.
Nothing really wrong with that, but it bloats programs, and is confusing
to read when debugging. I propose to change this to
{{{
-- Homogeneous equality
class a ~# b => (a :: k) ~ (b :: k)
instance a ~# b => a ~ b
}}}
That is, implement `(~)` in precisely the same way as `(~~)`.
This makes `(~)` a tiny bit more baked-in to the compiler, but in exchange
it behaves in the same way as `(~~)`, instead of behaving in a slightly
different way.
There should be no observable effect for users.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15421>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list