Skip to content

Data type return kinds don't obey the forall-or-nothing rule

Originally noticed here. GHC accepts this:

{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeInType #-}

import Data.Kind

data Foo :: forall a. a -> b -> Type where
  MkFoo :: a -> Foo a b

Despite the fact that Foo's return kind is headed by an explicit forall which does not quantify b.

The users' guide doesn't explicitly indicate that the forall-or-nothing rule should apply to data type return kinds, but goldfirere believes that not doing so is an inconsistent design, so I'm opening this ticket to track this.

Trac metadata
Trac field Value
Version 8.2.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler (Type checker)
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