
#14761: Incorrect diagnostic for UNPACK/missing strictness -------------------------------------+------------------------------------- Reporter: dminuoso | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect | Unknown/Multiple error/warning at compile-time | Test Case: Blocked By: | Blocking: Related Tickets: #7210 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Both `{-# UNPACK #-}` and `!` only make sense at the outer level of a type in a data constructor field. But in GADT-style declarations, they can appear to be "inside" a type {{{ data T where K :: !(Maybe Int) -> {-# UNPACK #-} !Int -> T }}} Somehow `!` looks as if it should bind tightly. e.g. `!Maybe Int -> T` looks wrong. But I agree that `{-# UNPACK #-}` would be better with a lower precedence. Since these annotations/pragmas can't occur nested (except as above), I don't think it would be a breaking change to reduce the precedence of `{-# UNPACK #-}` if someone wants to make a proposal. Meanwhile, yes, the error message should be better. Something about saying `{-# UNPACK #-}` cannot appear nested inside a type might help? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14761#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler