Type equality constraint not propagated to superclass
The code:
{-# LANGUAGE TypeFamilies, UndecidableInstances #-}
-- Demonstrates a bug in propagating type equality constraints
class VectorSpace v where
type Scalar v :: *
class VectorSpace v => InnerSpace v
instance (VectorSpace u,VectorSpace v, Scalar u ~ Scalar v) => VectorSpace (u,v) where
type Scalar (u,v) = Scalar u
instance (InnerSpace u,InnerSpace v, Scalar u ~ Scalar v) => InnerSpace (u,v)
In ghc 6.9.20080622, the last line yields
Data\TypeEqBug.hs:20:0:
Couldn't match expected type `Scalar v'
against inferred type `Scalar u'
When checking the super-classes of an instance declaration
In the instance declaration for `InnerSpace (u, v)'
I'd expect the type equality constraint in the InnerSpace instance to get propagated to the parent class.
By the way, without the UndecidableInstances above, we get:
Constraint is no smaller than the instance head
in the constraint: Scalar u ~ Scalar v
(Use -XUndecidableInstances to permit this)
In the instance declaration for `VectorSpace (u, v)'
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.9 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | conal@conal.net |
| Operating system | Unknown |
| Architecture | Unknown |