[GHC] #11008: GND with Type Families
GHC
ghc-devs at haskell.org
Thu Oct 22 22:11:20 UTC 2015
#11008: GND with Type Families
-------------------------------------+-------------------------------------
Reporter: crockeea | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.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:
-------------------------------------+-------------------------------------
In the following code:
{{{
{-# LANGUAGE TypeFamilies, FlexibleContexts, UndecidableInstances #-}
class C r
type family F r
newtype Foo r = Foo r
instance (C (F r), Eq r) => Eq (Foo r)
newtype Bar r = Bar (Foo r) deriving (Eq)
}}}
GHC produces the error
{{{
No instance for (C (F r))
arising from the 'deriving' clause of a data type declaration
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (Eq (Bar r))
}}}
If I enable `StandaloneDeriving`, I am able to derive the instance:
`deriving instance (Eq (Foo r)) => Eq (Bar r)`
[https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/deriving.html
#newtype-deriving The docs] indicate that this is exactly the instance
that should be generated by GND for
`newtype T v1..vn = MkT (t vk+1..vn) deriving (C t1..tj)`,
where my code uses the following parameters:
{{{
T = Bar
v1 = r
n = 1
MkT = Bar
t = Foo r
k= 1
C = Eq
j = 0
}}}
and all of the conditions enumerated in the docs seem to be met.
Furthermore, `Bar` seems to fit squarely into the format of `data T1` in
section 7.5.1 of the same documentation, which indicates it should not
need `StandaloneDeriving`. It seems that the type family constraint on the
`Eq` instance for `Foo` is causing the problem, but it's not clear why I'm
forced to write a standalone instance that is identical to the one that
should be generated by GND.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11008>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list