DeriveFunctor spuriously rejects existential context with type synonym mentioning the last type variable
This code does not compile:
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE StandaloneDeriving #-}
module Bug where
import GHC.Exts (Constraint)
type C (a :: Constraint) b = a
data T a b = C (Show a) b => MkT b
deriving instance Functor (T a)
GHCi, version 8.2.0.20170523: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
[1 of 1] Compiling Bug ( Bug.hs, interpreted )
Bug.hs:13:1: error:
• Can't make a derived instance of ‘Functor (T a)’:
Constructor ‘MkT’ must be truly polymorphic in the last argument of the data type
• In the stand-alone deriving instance for ‘Functor (T a)’
|
13 | deriving instance Functor (T a)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
But it should, since if you expand C (Show a) b
, you're left with Show a
, which doesn't mention the last type variable b
at all.
Fix incoming.
Trac metadata
Trac field | Value |
---|---|
Version | 8.0.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler (Type checker) |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |