[GHC] #9778: Namespace collision detection for promoted types

GHC ghc-devs at haskell.org
Fri Nov 7 09:11:15 UTC 2014


#9778: Namespace collision detection for promoted types
-------------------------------------+-------------------------------------
              Reporter:  crockeea    |            Owner:
                  Type:  feature     |           Status:  new
  request                            |        Milestone:
              Priority:  normal      |          Version:  7.8.3
             Component:  Compiler    |         Keywords:
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:              |       Difficulty:  Unknown
  Unknown/Multiple                   |       Blocked By:
       Type of failure:              |  Related Tickets:
  None/Unknown                       |
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 Kosmikus is right.  Moreover, it's very common to say
 {{{
 data T = T Int

 f :: T -> T
 f (T x) = T (x+1)
 }}}
 where the type and the data constructor deliberately share a name.  That
 has to work.

 So in general terms, Kosmikus's suggestion of a hint is probably the way
 to go.

 However in this example, the hint is positively misleading.  You say that
 "This code compiles without the definition of `data S`" but that's not
 true:
 {{{
 T9778.hs:9:8:
     Expected a type, but ‘S n’ has kind ‘Nat’
     In the type signature for ‘foo’: foo :: S n -> S n
 }}}
 So suggesting to use the data constructor instead is not helpful.  I
 suppose if you had
 {{{
 foo :: Proxy (S n) -> Proxy (S n)
 }}}
 ''then'' the hint would make sense.  But now thing are getting quite
 complicated! I'm concerned that we might make matters worse instead of
 better.  Suggestions welcome.

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


More information about the ghc-tickets mailing list