[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