
#14101: Type synonyms can make roles too conservative -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: patch Priority: normal | Milestone: 8.4.1 Component: Compiler (Type | Version: 8.2.1 checker) | Resolution: | Keywords: roles Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: #8234 | Differential Rev(s): Phab:D3838 Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): My concern is that this might not always do the best job with closed type families. In particular, we can produce a bound on the role of an application of a closed type family even if we can't reduce it. {{{#!hs type family Foo a where Foo 'True = Maybe Foo 'False = Either Int newtype Bar a b = Bar (Foo a b) }}} We know that `Foo a` must be `Maybe`, `Either Int`, or stuck. I believe it should therefore be safe to give `b` a representational role. My guess is that the right thing is to give type signatures and closed type families role annotations with the number of components determined by the number of arrows in their kinds. }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14101#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler