
#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:5 nomeata]:
But note that you are pattern matching on `xs`!
Ah, I see what you mean. That pattern match, however, is not essential. Suppose we leave it out. Then we get {{{#!hs cycle [] = let cyc = augment cycle' cyc in cyc where cycle' c n = foldr c n [] }}} `foldr/nil` gives {{{#!hs cycle [] = let cyc = augment (\c n -> []) cyc in cyc }}} Then applying `augment`: {{{#!hs cycle [] = let cyc = [] in cyc }}} So we've turned `_|_` into `[]`, whereas a similar omission from the current definition of `cycle` would turn an error into a much-less- desirable non-termination. This is not a disaster, and in fact it makes sense from a monoid perspective. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9398#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler