Skip to content

raise# should have an open kind in its return type

I noticed this while working on https://phabricator.haskell.org/D861. error has a wired-in type

error :: forall (a :: OpenKind). String -> a

and an implementation

error :: String -> a
error s = raise# (errorCallException s)

But GHC will actually reject the definition of error if you check it against the wired-in type as raise# has a lifted kind.

The only reason we can compile base is that open kinds cannot be expressed in Haskell source, so when GHC compiles GHC.Err it thinks error has a lifted kind, but for every other module it uses the wired-in type with an open kind.

I'm marking this as low priority because I don't see how it could affect anyone outside of GHC developers, since open kinds aren't expressible in the source language.

Trac metadata
Trac field Value
Version 7.11
Type Bug
TypeOfFailure OtherFailure
Priority low
Resolution Unresolved
Component Compiler
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