[GHC] #9398: Data.List.cycle is not a good producer

GHC ghc-devs at haskell.org
Sun Aug 3 18:34:01 UTC 2014


#9398: Data.List.cycle is not a good producer
-------------------------------------+-------------------------------------
              Reporter:  dfeuer      |            Owner:
                  Type:  bug         |           Status:  new
              Priority:  normal      |        Milestone:  7.8.4
             Component:              |          Version:  7.8.3
  libraries/base                     |         Keywords:
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:              |       Difficulty:  Easy (less than 1
  Unknown/Multiple                   |  hour)
       Type of failure:  Runtime     |       Blocked By:
  performance bug                    |  Related Tickets:
             Test Case:              |
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------
Changes (by dfeuer):

 * status:  closed => new
 * resolution:  invalid =>


Old description:

> Data.List.cycle is not a good producer. I'm not at all sure this solution
> is the best, but it allocates much less when mapped over and then folded.
> If we could make it a good consumer cheaply that would be nice too, but I
> imagine it's probably mostly applied to short lists, so that is probably
> not a priority.
>
> {{{#!hs
> {-# INLINE cycle #-}
> cycle :: [a] -> [a]
> cycle [] = error "Prelude.cycle: empty list"
> cycle xs = concat $ repeat xs
> }}}

New description:

 Data.List.cycle is not a good producer. I ''believe'' the following fixes
 it. The tests I've profiled so far suggest it does so.

 {{{#!hs
 {-# INLINE cycle #-}
 cycle :: [a] -> [a]
 cycle [] = error "Empty cycle."
 cycle xs = let cyc = augment cycle' cyc in cyc
   where cycle' c n = foldr c n xs
 }}}

--

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


More information about the ghc-tickets mailing list