[GHC] #14594: 2 modules / 2500LOC takes nearly 3 minutes to build

GHC ghc-devs at haskell.org
Tue Jan 16 15:48:05 UTC 2018


#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):

 There's always a certain amount of non-linearity in the types of multi-
 field records. For example, given

 {{{#!hs
 data Foo = Foo Int Char Integer

 gfoldlFoo
   :: (forall d b. Data d => c (d -> b) -> d -> c b)
      -> (forall g. g -> c g) -> Foo -> c Foo
 gfoldlFoo c k (Foo x y z) =
   k Foo `c` x `c` y `c` z
 }}}

 we get

 {{{
 Testy.$wgfoldlFoo
   = \ (@ (c_s4UQ :: * -> *))
       (w_s4UR :: forall d b. Data d => c_s4UQ (d -> b) -> d -> c_s4UQ b)
       (w1_s4US :: forall g. g -> c_s4UQ g)
       (ww_s4UW :: Int)
       (ww1_s4UX :: Char)
       (ww2_s4UY :: Integer) ->
       w_s4UR
         @ Integer
         @ Foo
         Data.Data.$fDataInteger
         (w_s4UR
            @ Char
            @ (Integer -> Foo)
            Data.Data.$fDataChar
            (w_s4UR
               @ Int
               @ (Char -> Integer -> Foo)
               Data.Data.$fDataInt
               (w1_s4US @ (Int -> Char -> Integer -> Foo) Testy.Foo)
               ww_s4UW)
            ww1_s4UX)
         ww2_s4UY
 }}}

 Note that we get types `Foo`, `Integer -> Foo`, `Char -> Integer -> Foo`,
 and `Int -> Char -> Integer -> Foo`. But does this affect the simplifier?
 I don't know.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14594#comment:17>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list