Associated data families don't use superclasses when deriving instances
class Functor (TotalMap key) => Key key where
data TotalMap key :: Type -> Type
(¡) :: TotalMap key val -> key -> val
a constraint Key key entails a Functor (TotalMap key) constraint, using the notation of constraints
prf1 :: Key key :- Functor (TotalMap key)
prf1 = Sub Dict
prf2 :: (Key key1, Key key2) :- (Functor (TotalMap key1), Functor (TotalMap key2))
prf2 = prf1 *** prf1
Yet these proofs are not used in
-- tzLp.hs:28:89-95: error: …
-- • No instance for (Functor (TotalMap key1))
-- arising from the first field of ‘PairMap’
-- (type ‘TotalMap key1 (TotalMap key2 val)’)
-- Possible fix:
-- use a standalone 'deriving instance' declaration,
-- so you can specify the instance context yourself
-- • When deriving the instance for (Functor (TotalMap (key1, key2)))
-- Compilation failed.
instance (Key key1, Key key2) => Key (key1, key2) where
data TotalMap (key1, key2) val = PairMap (TotalMap key1 (TotalMap key2 val))
deriving Functor
(¡) :: TotalMap (key1, key2) val -> ((key1, key2) -> val)
PairMap keys ¡ (k1, k2) = keys ¡ k1 ¡ k2
I would expect it to work like
deriving instance (Key key1, Key key2) => Functor (TotalMap (key1, key2))
Same problem occurs with only a single constraint
-- tzLp.hs:33:14-20: error: …
-- • No instance for (Functor (TotalMap key))
-- arising from the first field of ‘Id’ (type ‘TotalMap key val’)
-- Possible fix:
-- use a standalone 'deriving instance' declaration,
-- so you can specify the instance context yourself
-- • When deriving the instance for (Functor
-- (TotalMap (Identity key)))
-- Compilation failed.
instance Key key => Key (Identity key) where
data TotalMap (Identity key) val = Id (TotalMap key val)
deriving Functor
which should work like
deriving instance Key key => Functor (TotalMap (Identity key))
-- or
deriving instance Functor (TotalMap key) => Functor (TotalMap (Identity key))
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |