[Haskell-cafe] GHC.Generics: how to derive a Generic instance for an existential type?
Andreas Abel
abela at chalmers.se
Fri Jun 12 08:25:43 UTC 2015
Dear Pedro,
thanks for the answer and your pointers to the literature. As usual,
people want things to work *now*, and I am no exception. ;-)
It seems like generics are broken in ghc 7.6.3 which we support for
Agda, so I have to give up on generics for next years (until we drop
support for ghc < 7.8).
https://code.google.com/p/agda/issues/detail?id=1558
Cheers,
Andreas
On 07.06.2015 09:34, José Pedro Magalhães wrote:
> Hi Andreas,
>
> No, GHC.Generics doesn't support existentials.
>
> If your existentials are used as arguments to constructors (like in the
> example you've provided), the only approach I'm aware of that might help
> you is this:
>
> Alexey Rodriguez Yakushev and Johan Jeuring.
> Enumerating Well-Typed Terms Generically.
> <http://www.cs.uu.nl/research/techreps/UU-CS-2009-017.html>
> In Proceedings workshop on Approaches and Applications of Inductive
> Programming 2009.
> (This reference seems to be missing its references. You could also
> look at Chapter 5 of Alexey's thesis
> <file:///C:/Users/Dreixel/Desktop/rodriguez.pdf>.)
>
>
> If your existentials are used only as indices, then you could look at this:
>
> José Pedro Magalhães and Johan Jeuring.
> Generic Programming for Indexed Datatypes.
> <http://dreixel.net/research/pdf/gpid.pdf>
> In Proceedings of the 7th ACM SIGPLAN Workshop on Generic
> Programming (WGP'11), pp. 37–46, ACM, 2011.
> (Chapter 10 of my thesis
> <http://dreixel.net/index.php?content=thesis> has a more up-to-date
> version.)
>
>
>
> Cheers,
> Pedro
>
> On Sat, Jun 6, 2015 at 2:41 PM, Andreas Abel <andreas.abel at ifi.lmu.de
> <mailto:andreas.abel at ifi.lmu.de>> wrote:
>
> 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 <mailto:andreas.abel at gu.se>
> http://www2.tcs.ifi.lmu.de/~abel/
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
>
--
Andreas Abel <>< Du bist der geliebte Mensch.
Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden
andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/
More information about the Haskell-Cafe
mailing list