Skip to content

Panic in GHCi when using functional dependencies and promoted kinds

Consider the following code:

{-# LANGUAGE PolyKinds, DataKinds, TypeFamilies, GADTs, MultiParamTypeClasses,
             FunctionalDependencies, FlexibleInstances, UndecidableInstances #-}

import Prelude hiding (Maybe, Nothing)

data Maybe :: * -> * where
  Nothing :: Maybe a

data family Sing (a :: k)

data instance Sing (a :: Maybe k) where
  SNothing :: Sing Nothing

data KProxy (a :: *) = KProxy
data Existential (p :: KProxy k) =
  forall (a :: k). Exists (Sing a)

class HasSingleton a (kp :: KProxy k) | a -> kp where
  exists :: a -> Existential kp

instance forall a (mp :: KProxy (Maybe ak)). HasSingleton (Maybe a) mp where
  exists Nothing = Exists SNothing

When I load it into GHCi and ask for

*Main> :t exists Nothing

I get the following:

ghc-stage2: panic! (the 'impossible' happened)
  (GHC version 7.5.20120426 for x86_64-apple-darwin):
	tcTyVarDetails ak{tv avTW} [tv]

When I add foo = exists Nothing to the end of the compiled code, however, the behavior is as expected. I did try adding all relevant GHC extensions to the running instance of GHCi, but that did not solve the problem.

Trac metadata
Trac field Value
Version 7.5
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component GHCi
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information