[GHC] #14046: “Illegal type synonym family application in instance” is too strict in the presence of functional dependencies
GHC
ghc-devs at haskell.org
Thu Jul 27 21:53:15 UTC 2017
#14046: “Illegal type synonym family application in instance” is too strict in the
presence of functional dependencies
-------------------------------------+-------------------------------------
Reporter: lexi.lambda | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: GHC rejects
Unknown/Multiple | valid program
Test Case: | Blocked By:
Blocking: | Related Tickets: #3485
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
GHC rejects the following instance, complaining about the use of a type
synonym family in the instance head:
{{{#!hs
type family Fam a
class Multi a b | a -> b
instance Multi (Maybe a) (Fam a)
}}}
However, this seems too strict to me, since the second parameter of
`Multi` is determined by a functional dependency. If I tweak the instance
slightly to lift the second parameter out of the instance head into an
equality constraint, GHC accepts the instance:
{{{#!hs
instance (b ~ Fam a) => Multi (Maybe a) b
}}}
It seems to me that, due to the functional dependency, these two instances
are completely equivalent. Therefore, GHC should accept the first
instance.
This is similar to an old ticket, #3485, but that did not involve fundeps,
so GHC’s error was correct. I’m pretty sure the addition of functional
dependencies changes things, making the two actually equivalent.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14046>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list