Here's the approach I would try.
1. Use Data.List.group to group your multiset, eg [1,1,2] -> [[1,1],[2]]
2. Now apply your partitions function to each of the groups
[[1,1],[2]] -> [ [([1,1],[]), ([1],[1]), ([],[1,1])], [([2],[]), ([],[2])] ]
(Actually of course, you can probably write a simpler function to do this)
3. Then you just need a function which can list all possible ways of combining 
the partial partitions (so it's a kind of Cartesian product).

I leave you the pleasure of writing the code.


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to