
#7908: InstanceSigs suggestion not accepted ---------------------------------+------------------------------------------ Reporter: heisenbug | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.7 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: None/Unknown Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Changes (by simonpj): * cc: dimitris@…, dreixel (added) * difficulty: => Unknown Comment: This is a problem with the notation for kind polymorphism. This works: {{{ instance Monad' (Hidden :: (k -> *) -> *) where return' :: forall (c :: k -> *) (a :: k) . c a -> Hidden c return' = Hide ...etc.. }}} Note the kind signature on `Hidden`. That brings `k` into scope. Without that, `k` is not in scope. And if it isn't in scope, GHC adds an implicit `forall` for the `k`. So if you write {{{ instance Monad Hidden where return' :: forall (c :: k -> *) (a :: k) . c a -> Hidden c return' = Hide }}} what you mean is: {{{ instance Monad Hidden where return' :: forall k. forall (c :: k -> *) (a :: k) . c a -> Hidden c return' = Hide }}} And that is rightly rejected. So there are two problems: * The error message doesn't make it clear what exactly is wrong * Even if it did, the fix (bringing `k` into scope across the whole instance decl) is far from obvious Now that we understand the problem, any suggestions for what would be a better error message, or how to make the solution clearer? -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7908#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler