
#14594: 2 modules / 2500LOC takes nearly 3 minutes to build -------------------------------------+------------------------------------- Reporter: schyler | Owner: dfeuer Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple performance bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): I've been digging a bit further (with GHC 8.2.2). It appears that the (derived) `Data` instances are responsible for most of the compilation time. I haven't yet tracked down what's taking the most time (no particular compiler phase seems egregiously bad). After peeking at some Core and thinking about the methods of `Data`, it doesn't really seem too surprising that the instances for large products might compile slowly. {{{#!hs gfoldl :: Data a => => (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a gunfold :: Data a => (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a }}} Note the `Data` constraints on the function arguments. The implementation of `gfoldl` or `gunfold` needs to provide `Data` dictionaries for each field type. Those will initially be local `let`-bound values. Hopefully the duplicates are eventually eliminated, but if that doesn't happen quickly, we could waste some time. I'm still building HEAD to see if this has changed any lately. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14594#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler