[GHC] #8185: Change role annotation syntax

GHC ghc-devs at haskell.org
Wed Aug 28 13:55:03 UTC 2013


#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 goldfire):

 Role annotations can appear for one of two reasons:

 * The writer of some datatype wishes to restrict its use and prevent
 `GeneralizedNewtypeDeriving` over classes that use that datatype. This
 type of role annotation can make only '''fewer''' programs type-check.
 Thus, it is '''never''' necessary, thus conforming to Simon's dictum about
 pragmas always being optional.

 * Types declared in hs-boot files must match the types in the base hs
 files. If the body of the type of omitted, a role annotation is sometimes
 necessary to make things match up. (Roles in hs-boot files default to
 Representational, which is the common case. This defaulting mechanism is
 documented in the hs-boot section of the manual.) This type of annotation
 is sometimes necessary, so it violates Simon's dictum.

 Given the second use of role annotations above, we may want to consider a
 non-pragma syntax, in order to keep pragmas as optional. (Though, it's
 worth noting that `LANGUAGE` pragmas are surely ''not'' optional.) I favor
 including the word "role" in the notation (for easy searching of an
 esoteric topic). I would also prefer using `{ }` over `[ ]` in a notation
 like Simon's suggestion -- braces are never used like that, and it avoids
 the appearance of talking about lists.

 I do have to say I'm not totally convinced that using a pragma is a bad
 idea. Not only are `LANGUAGE` pragmas required, but also `SOURCE` pragmas.

 Other thoughts?

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8185#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler




More information about the ghc-tickets mailing list