[Haskell-cafe] Does somebody know about these functions?
holmisen at gmail.com
Tue Feb 28 20:21:00 CET 2012
>> inter :: (a -> a -> b) -> [a] -> [b]
>> inter f  = 
>> inter f l = map (uncurry f) $ zip l (tail l)
> This is the same as
> inter :: (a -> a -> b) -> [a] -> [b]
> inter f l = zipWith f l (tail l)
Except when l == , but the second equation can be replaced by this nicer one.
> and you can use it to define the good old Fibonacci sequence:
> fibs = 0 : 1 : inter (+) fibs
Another use :-)
(sorry Holger for duplicate -- hit wrong answer button at first)
Together, these functions can be used to define a variant of groupBy
that does the "expected thing" in the case of groupBy (<) for example.
groupBy f l = gby $ zip (undefined : inter f l) l where
gby  = 
gby ((_,x):ps) = withPair (:) ((x:) . map snd) gby (span fst ps)
>>> groupBy (<) [1,2,3, 2,3, 1,2]
More information about the Haskell-Cafe