# [Haskell-beginners] Re: Problem "grouping" a list

Hein Hundal hundalhh at yahoo.com
Thu Nov 25 10:02:44 EST 2010

```> From: Jo?o Paulo Pizani Flor <joaopizani at gmail.com>
> OK, so my specific problem goes like this: I have a list of
> tuples
> :t  myList
> [ (Float, Integer) ]
>
> And I want to "group" this list into a nested list
> groupAtoms :: [ (Float,Integer) ]  ->  [
> [(Float,Integer)] ]
>
> Of course, I want that the concatenation of the groups
> yield me the original
> list, i.e,  (foldl (++) [] . groupAtoms == id), and
> the criterion that
> defines a group is that:
> "The sum of the first elements in the tuples comprising the
> list must be
> greater than or equal to 1.0".

Jo?o,
I am a beginner also and I liked Daniel Fischer's solution.  Here is another (less elegant) solution:

-- Start Code Here

-- foldfun takes an existing list of lists of pairs and decides
-- whether to append p to the current list, pl, or start a new
-- list of pairs.

foldfun done p (pl:pls) = if done pl then [p]:pl:pls else (p:pl):pls
foldfun done p [] = [[p]]

-- mygroup2 folds list of pairs, pl, using the foldfun, and then
-- puts all the lists in the correct order using reverse twice.

mygroup2 pl = map reverse \$ reverse \$
foldr (foldfun done) [] (reverse pl)
where done pl = sum (map fst pl) >= 1.0

-- End of Code

Cheers,
Hein

```