Skip to content

GHC doesn't add constraint when deriving

I can't remember if this was intended, but GHC cannot derive newtype Functor or derive stock Functor for WGeneric even if it knows the constraint to add (I have FlexibleInstances enabled)

import GHC.Generic

-- • Could not deduce (Functor (Rep1 f))
--     arising from the 'deriving' clause of a data type declaration
--   from the context: Functor f
--     bound by the deriving clause for ‘Functor (WGeneric f)’
--     at /home/baldur/hs/074.hs:63:5-11
--   Possible fix:
--     use a standalone 'deriving instance' declaration,
--       so you can specify the instance context yourself
newtype WGeneric f a = WGeneric (Sum (Rep1 f) f a)
  deriving newtype
    Functor

but either of these works

deriving newtype instance (Functor f, Functor (Rep1 f)) => Functor (WGeneric f)

deriving stock   instance (Functor f, Functor (Rep1 f)) => Functor (WGeneric f)

Could GHC add the inferred Functor (Rep1 f)?

Trac metadata
Trac field Value
Version 8.2.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information