Actually I think valez aims were clear from his first post.
One easy way is with my own pet AVL library:-)
(Probably only installs properly with ghc at the moment).
The following does the trick I think..
fun :: Ord a => [a] -> [[a]]
fun as = [ replicate n a
| (a,n) <- asListL (asTreeKeyWith' (+) [(a,1) | a <- as])
I guess you could do something similar with Data.FiniteMap too.
I'll leave figuring out how it works as an exercise for valez :-)
(newbie hint: uses two list comprehensions)