[GHC] #8550: GHC builds recursive coerctions when using recursive type families

GHC ghc-devs at haskell.org
Thu Nov 21 12:21:46 UTC 2013


#8550: GHC builds recursive coerctions when using recursive type families
-------------------------------------------+-------------------------------
       Reporter:  nomeata                  |             Owner:
           Type:  bug                      |            Status:  new
       Priority:  normal                   |         Milestone:
      Component:  Compiler (Type checker)  |           Version:  7.6.3
       Keywords:                           |  Operating System:
   Architecture:  Unknown/Multiple         |  Unknown/Multiple
     Difficulty:  Unknown                  |   Type of failure:
     Blocked By:                           |  None/Unknown
Related Tickets:                           |         Test Case:
                                           |          Blocking:
-------------------------------------------+-------------------------------
 Consider
 {{{
 {-# LANGUAGE TypeFamilies, GADTs, UndecidableInstances #-}
 type family F a
         type instance F () = F ()
         data A where
          A :: F () ~ () => A
         x :: A
         x = A
 }}}

 On GHC 7.6.3 it yields a context reduction stack overflow (despite  F () ~
 ()  being put into the “solved funeqs” list).

 In HEAD, a recursive dictionary is built, but then detected:
 {{{
 [1 of 1] Compiling Foo              ( Foo.hs, Foo.o )
         ghc-stage2: panic! (the 'impossible' happened)
           (GHC version 7.7.20131108 for x86_64-unknown-linux):
                 Cycle in coercion bindings
             [[cobox_ayX{v} [lid]
                 = CO main:Foo.TFCo:R:F(){tc rob}[0] ; cobox_ayZ{v} [lid],
               cobox_ayZ{v} [lid] = CO cobox_ayX{v} [lid] ; cobox_az0{v}
 [lid]]]

         Please report this as a GHC bug:
 http://www.haskell.org/ghc/reportabug
 }}}

 Either this panic needs to be turned into an error, or we need to prevent
 recursive dictionaries for when solving funeqs (similar to how we do it
 for `Coercible`).

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


More information about the ghc-tickets mailing list