
#11747: `Strict` causes core lint error -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.1 Keywords: Strict | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- {{{ $ ghci -dcore-lint -XStrict -XGADTs -XRankNTypes -XTypeApplications -XScopedTypeVariables -ignore-dot-ghci GHCi, version 8.1.20160117: http://www.haskell.org/ghc/ :? for help Prelude> import Data.Typeable Prelude Data.Typeable> let zero :: forall x. Typeable x => Maybe x; zero = do Refl <- eqT @Int @x; pure 0 Prelude Data.Typeable> zero *** Core Lint errors : in result of desugar expression *** <no location info>: warning: In the expression: ds_d1t9 @ x_a1sx $dTypeable_a1sC @ x_a1sx $dTypeable_a1sz $dTypeable_a1sz :: Typeable x_a1sx [LclId, Str=DmdType] is out of scope *** Offending Program *** let { $dTypeable_a1sS :: Typeable () [LclId, Str=DmdType] $dTypeable_a1sS = D:Typeable @ * @ () (let { ds_d1tb :: TypeRep [LclId, Str=DmdType] ds_d1tb = mkPolyTyConApp $tc() ([] @ TypeRep) ([] @ TypeRep) } in \ (wild_00 :: Proxy# ()) -> ds_d1tb) } in let { $dShow_a1sU :: Show () [LclId, Str=DmdType] $dShow_a1sU = $fShow() } in let { $dShow_a1sP :: Show (Maybe ()) [LclId, Str=DmdType] $dShow_a1sP = $fShowMaybe @ () $dShow_a1sU } in letrec { ds_d1t9 :: forall x_a1sx. Typeable x_a1sx => forall x_a11P. Typeable x_a11P => Maybe x_a11P [LclId, Str=DmdType] ds_d1t9 = \ (@ x_a1sx) ($dTypeable_a1sC :: Typeable x_a1sx) -> let { $dTypeable_a1sz :: Typeable x_a1sx [LclId, Str=DmdType] $dTypeable_a1sz = $dTypeable_a1sC } in letrec { it_a1sw :: forall x_a11P. Typeable x_a11P => Maybe x_a11P [LclId, Str=DmdType] it_a1sw = zero; } in it_a1sw; it_a1dz :: forall x_a1sx. Typeable x_a1sx => Maybe x_a1sx [LclId, Str=DmdType] it_a1dz = \ (@ x_a1sx) ($dTypeable_a1sC :: Typeable x_a1sx) -> ds_d1t9 @ x_a1sx $dTypeable_a1sC @ x_a1sx $dTypeable_a1sz; } in case it_a1dz of it_a1dz { __DEFAULT -> thenIO @ () @ [()] (print @ (Maybe ()) $dShow_a1sP (it_a1dz @ () $dTypeable_a1sS)) (returnIO @ [()] (: @ () (unsafeCoerce# @ 'Lifted @ 'Lifted @ (forall x_a1sx. Typeable x_a1sx => Maybe x_a1sx) @ () it_a1dz) ([] @ ()))) } *** End of Offense *** <no location info>: error: Compilation had errors *** Exception: ExitFailure 1 Prelude Data.Typeable> }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11747 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler