Skip to content

Support for deriving Generic1 for data families

The following code:

import GHC.Generics

data family F typ :: * -> *
data A
data instance F A a = AData a deriving Generic1

produces an error when run with ghc 7.8.2 or 7.8.3:

Couldn't match type ‘Rep1 (F A)’
              with ‘M1 t0 t1 (M1 t2 t3 (M1 t4 t5 Par1))’
The type variables ‘t0’, ‘t1’, ‘t2’, ‘t3’, ‘t4’, ‘t5’ are ambiguous
Expected type: Rep1 (F A) a
  Actual type: M1 t0 t1 (M1 t2 t3 (M1 t4 t5 Par1)) a
In the pattern: M1 (M1 (M1 g1))
In an equation for ‘to1’: to1 (M1 (M1 (M1 g1))) = AData (unPar1 g1)
In the instance declaration for ‘Generic1 (F A)’

whereas ghc 7.6.3 simply refuses to go ahead with the message:

generic1.hs:14:40:
    Derived instance `Generic1 (F A)'
      requires illegal partial application of data type family F
    In the data instance declaration for `F'

Either a check has gone missing in 7.8.x, or a bug has crept up in the Generic1 support. I have gone through past tickets and #5936 (closed) suggests that it is the latter.

Trac metadata
Trac field Value
Version 7.8.2
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