[Haskell-cafe] GHC.Generics: how to derive a Generic instance for an existential type?

Andreas Abel andreas.abel at ifi.lmu.de
Sat Jun 6 13:41:53 UTC 2015

I wonder whether GHC.Generics supports existential types yet...

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE StandaloneDeriving #-}

import GHC.Generics

data U = forall a. (Generic a) => U a
   -- deriving (Generic)
     -- 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
     -- 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
   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?

Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se

More information about the Haskell-Cafe mailing list