[GHC] #11450: Associated types at wrong type in instance
GHC
ghc-devs at haskell.org
Thu Jan 21 15:59:27 UTC 2016
#11450: Associated types at wrong type in instance
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: high | Milestone: 8.0.1
Component: Compiler | Version: 7.10.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by rwbarton):
It's not a big deal, but I prefer the proposed change too. In my mind,
when I write an instance
{{{
instance C (Either a b) where ...
}}}
I'm really writing an instance for `Either a b` for each pair of specific,
but unknown, types `a` and `b`. According to the class declaration
{{{
class C x where
type T x
}}}
I'm supposed to provide the value of `T` on the specific type `Either a
b`. If I write `type T (Either b a) = ...`, then I haven't met that
obligation.
This argument is somewhat flimsy in that type variables in the head of an
instance don't actually scope over the instance body in Haskell 98; but
we're already so far outside Haskell 98 with associated type families that
I don't mind. (With ScopedTypeVariables instance head type variables do
scope over the body, which is the behavior most people expect, I think.)
It also just seems more practical: I might reasonably read `type T (...) =
b -> a` and doze off over the argument of `T`, expecting a sensible author
to have made it match the instance head. Surprise!
Technically this is a breaking change, but I feel that on balance, authors
will be more glad to learn about non-matching associated type heads, which
were probably unintentional, than annoyed that their code broke. However,
we should do it either quickly, before the next 8.0 RC, or leave it until
8.2. Nothing critical about this change that I can see, so better not to
slip it in at the last minute of a release.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11450#comment:12>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list