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

GHC ghc-devs at haskell.org
Sun Aug 3 21:55:20 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:              |
-------------------------------------+-------------------------------------

Comment (by dfeuer):

 Replying to [comment:12 nomeata]:
 > I think you need to move the knot-tying into the argument to build, e.g.
 something like
 > {{{
 > cycle xs = build $ \c _ ->  let cyc = foldr c cyc xs in cyc
 > }}}
 > (ignoring the issue of `cycle []` for now)
 >
 > It seems that this would be both a good producer, and possibly even a
 good consumer.

 I won't be able to test anything for some hours, but that does look very
 promising indeed. I wonder if GHC performed some transformation that
 turned mine into yours somehow, but yours is definitely much clearer and
 prettier in any case. I ''think'' it's a good producer, and a good
 consumer for `build`. It doesn't look like a perfect consumer for
 `augment` (although it's not a ''bad'' one), but that may be unavoidable.
 I believe `cycle` is one of the more popular list functions in production
 code, so personally I think it's probably worth giving up the error
 message on a null argument to buy a little performance, even on the
 consumption side, but it's also true that the production side is more
 important in general.

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


More information about the ghc-tickets mailing list