
#12792: Wrong error message when using a data type as a class instance head -------------------------------------+------------------------------------- Reporter: nomeata | Owner: Type: bug | Status: new Priority: low | Milestone: Component: Compiler | Version: 8.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect | Unknown/Multiple error/warning at compile-time | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by nomeata): * priority: normal => low Comment: Related, but still minor: GHC would happily suggest a data type constructor where a class name is expected. {{{#!hs Prelude> data Bar a Prelude> instance Baz a <interactive>:3:10: Not in scope: type constructor or class ‘Baz’ Perhaps you meant ‘Bar’ (line 2) }}} I read more through the code and see now why this is not easily done. The renamer does not know which names have methods, but for methods it knows what name they belong to (their parent, also just a name), so this can be caught early in the renamer. But since this parent information is “untyped”, we can actually trick the compiler in passing through the renamer, by using a record label (whose parent is the data type) as a class name: {{{#!hs data List a = List { bar :: a} instance List Int where bar = bar }}} produces {{{ [1 of 1] Compiling Main (.hs -> .o) /tmp/T12792.hs:2:10: error: • Expected a constraint, but ‘List Int’ has kind ‘*’ • In the instance declaration for ‘List Int’ }}} I get one way of getting saner behavior and early error reporting here would be to change the `NameSpace` type to distinguish between TyCons and classes, and at every use of namespaces pay close attention where one, the other, or both are valid. Since a `Name` knows it `NameSpace`, this would fix the problem at hand. But it would be quite a bit of work, and without other obvious benefits, not worth it. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12792#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler