
If we indeed provide this function here, we might as well want to invest
#11815: Data.List: Add a function to get consecutive elements (mapConsecutives) -------------------------------------+------------------------------------- Reporter: holmisen | Owner: Type: feature request | Status: new Priority: low | Milestone: Component: libraries/base | Version: Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): Replying to [comment:3 nomeata]: the effort to provide a well-engineered implementation. You could try to find out if
* an explicit recursion function is significantly faster and * if it is possible to write `zipConsecutive` as a good consumer or
good producer or both, in terms of list fusion.
David Feuer might be interested in thinking about the second point.
I thought about something quite similar very recently! The fusion-enabled version would look something like this, with all the usual `RULES` noise added: {{{#!hs zipConsecutiveWith :: (a -> a -> b) -> [a] -> [b] zipConsecutiveWith f xs = build builder where builder c n = foldr go (`seq` n) xs Nothing go x r Nothing = r (Just x) go x r (Just prev) = f prev x `c` r (Just x) }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11815#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler