[GHC] #16278: Exhaustivity checking GADT with free variables

GHC ghc-devs at haskell.org
Sat Feb 2 16:12:49 UTC 2019


#16278: Exhaustivity checking GADT with free variables
-------------------------------------+-------------------------------------
        Reporter:  andrewthad        |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.6.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 andrewthad):

 Thanks for the insights!  I’m not certain that GHC replaces the
 polymorphic type variable with Any  before the exhaustiveness check
 happens. (Although I suspect it does).  If it does, then is  unfortunate
 that we end up doing an apartness check for `'Send` an `Any` when what
 should actually happen is an apartness  check for `'Send` and `forall (s
 :: Send). s` (talking about the second example where I omitted the type
 annotation).

  You make a good argument that teaching the compiler  about apartness
 involving type families in the general case  is difficult  or maybe in
 possible.  But  there are more specific cases where deciding apartness is
 a more tractable problem.  You could consider  only non-recursive type
 families,  only type families that don’t mention other  type families,
 nullary type families,  or the combination of all three (aka Any). From
 what I’ve found in the GHC wiki,  it looks like the apartness check  is an
 approximation anyway.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16278#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list