[GHC] #8672: :browse and roles on typefamilies

GHC ghc-devs at haskell.org
Fri Jan 17 10:04:32 UTC 2014


#8672: :browse and roles on typefamilies
-------------------------------------------------+-------------------------
        Reporter:  monoidal                      |            Owner:
            Type:  bug                           |  goldfire
        Priority:  low                           |           Status:  new
       Component:  Compiler (Type checker)       |        Milestone:
      Resolution:                                |          Version:  7.7
Operating System:  Unknown/Multiple              |         Keywords:
 Type of failure:  Incorrect warning at          |     Architecture:
  compile-time                                   |  Unknown/Multiple
       Test Case:                                |       Difficulty:
        Blocking:                                |  Unknown
                                                 |       Blocked By:
                                                 |  Related Tickets:
-------------------------------------------------+-------------------------
Changes (by simonpj):

 * owner:   => goldfire


Comment:

 The reason this is happening is because `SNil` is defined, so GHC is
 showing the appropriate `data instance`.  Then it tries to show the roles
 of the data instance, and does so badly.

 Richard, two questions. First in this case, can't the data instance have a
 representational role inferred?  Eg this ought to work.  The definition of
 `g` is currently rejected.
 {{{
 data family T a
 data instance T [b] = MkT b

 newtype Age = MkAge Int

 g :: T [Age] -> T [Int]
 g x = coerce x
 }}}
 Second question.  Are role annotations allowed on data family
 declarations, where they could indicate which parameters are the indices:
 {{{
 type role T representational nominal  -- Only second param can be an index
 data family T a b

 data instance T a Bool = ...   -- Allowed
 data instance T Bool b = ...   -- Rejected
 }}}
 (And similarly for type families.)

 Similarly are role annotations allowed on data instance declarations,
 where they would be useful in exactly the same way that they are on data
 decls
 {{{
 data family T a

 type role T [a] (a:nominal)
 data instance T [a] = MkT a
 }}}
 Here we are running out of syntax!  This isn't supported now because I
 think all parameters are automatically nominal (see point 1 for why they
 shouldn't be).

 Simon

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


More information about the ghc-tickets mailing list