[GHC] #9918: GHC chooses an instance between two overlapping, but cannot resolve a clause within the similar closed type family

GHC ghc-devs at haskell.org
Mon Dec 29 18:17:36 UTC 2014


#9918: GHC chooses an instance between two overlapping, but cannot resolve a
clause within the similar closed type family
-------------------------------------+-------------------------------------
        Reporter:  qnikst            |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Compiler          |                 Version:  7.8.3
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  None/Unknown      |  Unknown/Multiple
      Blocked By:                    |               Test Case:
 Related Tickets:                    |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by goldfire):

 Thanks for the examples in comment:7. The first example can show up the
 very problem I was looking for!

 Consider this alternate ending to the first example there (which also
 needs `ScopedTypeVariables`):

 {{{
 type family Inf x where
   Inf () = S (Inf ())    -- pattern-match on () avoids an eager occurs-
 check

 test2 (_ :: x) = test (undefined :: Inf x)
 -- test2 :: x -> Int

 main = test2 ()
 }}}

 This will, of course, evaluate to `2`. But it arguably shouldn't, because
 `main` boils down to a comparison between `S (S (Inf ()))` and `Inf ()`,
 which is impossible to determine.

 The extra constraint that appears in the second example (the one with
 closed type families) essentially says that the two type-level numbers
 have a well-defined relationship. When infinity is involved, they don't,
 giving more reliable behavior (in extreme, perverse circumstances,
 admittedly).

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


More information about the ghc-tickets mailing list