
#13328: Foldable, Functor, and Traversable deriving handle phantom types badly -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.4.1 Component: Compiler | Version: 8.1 Keywords: deriving-perf | Operating System: Unknown/Multiple Architecture: | Type of failure: Runtime Unknown/Multiple | performance bug Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Suppose we have {{{#!hs data Phantom a = Z | S (Phantom a) }}} We'd like to get something like {{{#!hs foldMap _ _ = mempty fmap = coerce traverse _ m = pure (coerce m) }}} But instead we actually pattern match all the way down! Basically, we want to treat "has a phantom role" and "does not occur" similarly. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13328 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler