Generic for existential types
I have some use for Generic for an existential type which is constraint to be Generic.
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE StandaloneDeriving #-}
import GHC.Generics
data U = forall a. (Generic a) => U a
deriving (Generic) -- TRY 1
-- Can't make a derived instance of ‘Generic U’:
-- Constructor ‘U’ has existentials or constraints in its type
-- Possible fix: use a standalone deriving declaration instead
deriving instance Generic U -- TRY 2
-- Can't make a derived instance of ‘Generic U’:
-- U must be a vanilla data constructor
-- In the stand-alone deriving instance for ‘Generic U’
data D1Ser
data C1_0Ser
instance Generic U where -- TRY 3
type Rep U = D D1Ser (C1 C1_0Ser (S1 NoSelector (Rep a)))
-- Not in scope: type variable ‘a’
-- How to bring the existential type `a' into scope?
Edited by andreas.abel