
#8185: Change role annotation syntax ----------------------------+---------------------------------------------- Reporter: | Owner: goldfire goldfire | Status: new Type: feature | Milestone: 7.8.1 request | Version: 7.7 Priority: normal | Keywords: Component: | Architecture: Unknown/Multiple Compiler | Difficulty: Moderate (less than a day) Resolution: | Blocked By: Operating System: | Related Tickets: Unknown/Multiple | Type of failure: | None/Unknown | Test Case: | Blocking: | ----------------------------+---------------------------------------------- Comment (by simonpj): Thus far, pragmas have always been optional; that is, the program will compile ok without them. Eg INLINE pragmas, deprecations, SPECIALISE etc. This is different: the program won't typecheck without the pragma, and that is new. It's a bit like we put type signatures in pragmas. To me these role annotations are just like kind annotations. Why don't we put kind annotations in pragmas? Role annotations really are part of the ''language''. I'm ok with a noisy notation; it's only the pragma-brackets that bug me. Shall we explore some alternatives first? (Remember that whatever we do must be compatible with also having a kind annotation.) For example {{{ data Foo [Nominal] a = ... data Foo ([Nominal] a :: *) = ... data Foo [role Nominal] a = ... -- Or postfix versions data Foo a [Nominal] = ... data Foo a [role Nominal] = ... }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8185#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler