
#11545: Strictness signature blowup -------------------------------------+------------------------------------- Reporter: jscholl | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 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: -------------------------------------+------------------------------------- The following code takes a lot of memory (556MB) to compile: {{{#!hs data A = A A A A A A deriving (Eq) }}} More {{{A}}}s result in more memory consumption during compilation. Using {{{ghc -O A.hs -v -dverbose-core2core -c -ddump-simpl +RTS -s}}} it seems like the strictness signatures of (==) and (/=) blow up quite a bit. A less silly example could be the following: {{{#!hs data QuadTree a = QuadTree !Int [a] (QuadTree a) (QuadTree a) (QuadTree a) (QuadTree a) foldQuadTree :: (a -> b -> b) -> Int -> b -> QuadTree a -> b foldQuadTree f maxSize = go where go z (QuadTree size elems t1 t2 t3 t4) | size <= maxSize = foldr f z elems | otherwise = go (go (go (go z t4) t3) t2) t1 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11545 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler