[GHC] #13293: ConstrainedClassMethods makes GeneralizedNewtypeDeriving fail
GHC
ghc-devs at haskell.org
Fri Feb 17 22:00:05 UTC 2017
#13293: ConstrainedClassMethods makes GeneralizedNewtypeDeriving fail
-------------------------------------+-------------------------------------
Reporter: j.waldmann | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Example:
{{{
{-# language GeneralizedNewtypeDeriving #-}
{-# language ConstrainedClassMethods #-}
instance ToDoc Int where toDoc = undefined
newtype P = P Int deriving ( ToDoc )
type Doc = ()
class ToDoc a where
toDoc :: ToDoc a => a -> Doc
}}}
compile with ghc-8.0.2:
{{{
C.hs:6:30: error:
• Couldn't match type ‘Int’ with ‘P’
arising from the coercion of the method ‘toDoc’
from type ‘ToDoc Int => Int -> Doc’ to type ‘ToDoc P => P ->
Doc’
• When deriving the instance for (ToDoc P)
}}}
With ghc-8.0.1, it is fine.
When I drop the constraint on the method declaration, ghc-8.0.2 compiles
the program.
This repetition of the class constraint in the method declaration actually
came from a copy-paste error, so this issue does not affect my code, but
it's still puzzling. Repeating the class constraint should not change the
meaning of the program?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13293>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list