[Haskell-cafe] Comparing on multiple criteria

Henning Thielemann schlepptop at henning-thielemann.de
Tue Dec 23 22:37:06 EST 2008


David Menendez schrieb:
> On Sun, Dec 21, 2008 at 11:20 AM, Jan-Willem Maessen
> <jmaessen at alum.mit.edu> wrote:
>> On Dec 21, 2008, at 8:52 AM, Martijn van Steenbergen wrote:
>>
>>> Hello all,
>>>
>>> Data.Ord has a handy function called comparing, and its documentation
>>> shows an example of its use.
>>>
>>> But what if you want to sort a list of values based on multiple criteria?
>>> It turns out there is a neat way to do this:
>>>
>>> compareTuple = mconcat [comparing fst, comparing snd]
>>>
>>> The default Monoid instances for Ordering and functions work exactly as
>>> required here. (Thanks to vixey in #haskell for the hint to look at
>>> monoids!)
> 
> This is a great example of why it's a bad idea to introduce new
> functionality with a Monoid instance. Even if you know the instance
> exists, mappend is so general that it's difficult or impossible to
> predict what it will do at a given type.
> 
> There should be an explicit function for combining Ordering values
> lexicographically, with a note in the documentation saying that it's
> the basis of the Monoid instance.

+1

http://haskell.org/haskellwiki/Slim_instance_declaration


More information about the Haskell-Cafe mailing list