

Line 1: 
Line 1: 
−  [[Category:Proposals]]  +  see [[List function suggestions]]. 
−   
−  I was a bit annoyed when I found out that Data.List.groupBy compared each new element to the first element of a group instead of the last added element.
 
−   
−  I guess the current way it is easier to implement, but severely hinders its usefulness:
 
−   
−  <haskell>
 
−  > groupBy (\a b > a+1 == b) [1,2,3,4,6]
 
−  [[1,2],[3,4],[6]]
 
−  </haskell>
 
−   
−  I propose a different implementation of groupBy which would result in the following:
 
−   
−  <haskell>
 
−  > groupBy (\a b > a+1 == b) [1,2,3,4,6]
 
−  [[1,2,3,4],[6]]
 
−  </haskell>
 
−   
−  The following a naive implementation that was written for "workiness" instead of speed or space behavior:
 
−   
−  <haskell>
 
−  groupBy' :: (a > a > Bool) > [a] > [[a]]
 
−  groupBy' _ [] = []
 
−  groupBy' f (x:xs) = gb f xs [[x]]
 
−  where gb f (x:xs) ((a:as):bs) = gb f xs $ if f a x then ((x:a:as):bs)
 
−  else ([x]:(a:as):bs)
 
−  gb _ [] as = reverse . map reverse $ as
 
−  </haskell>
 
−   
−  I'm sure there are much nicer ways to implement this...
 
Latest revision as of 09:57, 6 September 2007