[GHC] #12144: GHC panic when using DeriveAnyClass with functor-like class and datatype with a type variable in a contravariant position

GHC ghc-devs at haskell.org
Thu Jun 2 01:51:41 UTC 2016


#12144: GHC panic when using DeriveAnyClass with functor-like class and datatype
with a type variable in a contravariant position
-------------------------------------+-------------------------------------
           Reporter:  RyanGlScott    |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.2.1
          Component:  Compiler       |           Version:  8.0.1
           Keywords:  Generics       |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Compile-time
  Unknown/Multiple                   |  crash
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 The following code

 {{{#!hs
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE KindSignatures #-}
 module Example where

 class C (a :: * -> *)
 data T a = MkT (a -> Int) deriving C
 }}}

 fails to compile with the following GHC panic:

 {{{
 $ /opt/ghc/8.0.1/bin/ghc Example.hs
 [1 of 1] Compiling Example          ( Example.hs, Example.o )
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.1 for x86_64-unknown-linux):
         contravariant

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

 The culprit is that when `DeriveAnyClass` comes up with the constraints
 for typeclass instances whose argument is of kind `* -> *`, it calls
 [http://git.haskell.org/ghc.git/blob/0676e68cf5fe8696f1f760fef0f35dba14db1104:/compiler/typecheck/TcGenDeriv.hs#l1665
 deepSubtypesContaining], which immediately bails out when it sees a type
 variable in a contravariant or "bad" position. I'm less sure of what the
 fix should be.

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


More information about the ghc-tickets mailing list