Too-eager variable capture in forall types
h's type is ineffable: GHCi infers Capture a, but listing that type in the souce code fails the typecheck. Listing no type allows the following:
{-# OPTIONS_GHC -fglasgow-exts #-}
data Capture a = Base a
| Capture (Capture (forall x . Divide x -> Divide a))
g :: Capture (forall a . Divide a -> Divide a)
g = Base id
h = Capture g
l :: Capture a
l = h
m :: Capture Int
m = h
data Divide a where
Pint :: Int -> Divide Int
Pbool :: Bool -> Divide Bool
foo :: Capture a -> Divide a
foo (Capture (Base f)) = f (Pbool True)
unfoo :: Divide a -> a
unfoo (Pint x) = x
unfoo (Pbool x) = x
oops = unfoo (foo h) -- Illegal instruction
oopsAgain = unfoo (foo l) -- Illegal instruction
oopsOnceMore = unfoo (foo m)
{-
<interactive>: internal error: interpretBCO: hit a CASEFAIL
(GHC version 6.6 for i386_unknown_linux)
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
Aborted
-}
Trac metadata
Trac field | Value |
---|---|
Version | 6.6 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |