
#15310: Derive Generic1 instances for types of kind (k -> *) -> * that include applications of the parameter -------------------------------------+------------------------------------- Reporter: cedricshock | Owner: (none) Type: feature | Status: new request | Priority: low | Milestone: Component: Compiler | Version: (Type checker) | Keywords: DeriveGeneric | Operating System: Unknown/Multiple Generic1 | Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- The `Generic1` class is polykinded. The `DeriveGeneric` extension can derive `Generic1` instances for types of kind `k -> *` parameterized over a parameter with a kind other than `k ~ *`, but only if they don't apply the parameter to other types. It currently cannot derive an instance for {{{#!hs newtype Fix f = In (f (Fix f)) deriving (Generic1) }}} or for {{{#!hs data Child f = Child { ordinal :: Int, nickname :: f String } deriving (Generic1) }}} It's possible to represent these types generically, either with composition that can include occurrences of the parameter or with new types that represent applications of the parameter. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15310 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler