
On Feb 11, 2014, at 10:15 AM, Erlend Hamberg wrote:
Another way to do this would be to sort the sub lists according to what they contain (the list heads) and then their length (to resolve ties). You could then use nubBy with “(==) `on` head” to remove lists and only be left with the longest lists. Since nub[By] keeps only the first occurrence of each element when there are duplicates, “comparing length” is flipped – meaning that longer lists come first. This gives us the following function:
nubBy ((==) `on` head) . sortBy (comparing head <> flip (comparing length)) . group
Where (<>) is from Data.Monoid. An explanation of using monoids to build sorting combinators can be found in this reddit post [note that the author uses (++) for (<>)]: http://www.reddit.com/r/programming/comments/7cf4r/monoids_in_my_programming...
Thank you for this example and the link. I have not explored the Data.Monoid module yet, but I will read through the reddit post. Best, James