Re: [Haskell-cafe] Comparing on multiple criteria

2008-12-24 Thread Martijn van Steenbergen

David Menendez wrote:

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.


Agreed.

Supposing such an explicit function exists (with proper documentation), 
would the original example be worth mentioning in or around comparing's 
documentation? If it saved the next user a couple of minutes of coming 
up with something similar, I'd be happy.


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


Re: [Haskell-cafe] Comparing on multiple criteria

2008-12-23 Thread Henning Thielemann
David Menendez schrieb:
 On Sun, Dec 21, 2008 at 11:20 AM, Jan-Willem Maessen
 jmaes...@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
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Comparing on multiple criteria

2008-12-21 Thread Jan-Willem Maessen

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!)


Indeed, this is great to know.  I can't help but notice that there is  
no documentation of any kind at all for the Monoid instance of  
Ordering; how were we supposed to know this behavior existed in the  
first place, except by hunting down the source code for the instance  
declaration?


-Jan-Willem Maessen

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


Re: [Haskell-cafe] Comparing on multiple criteria

2008-12-21 Thread Luke Palmer
On Sun, Dec 21, 2008 at 9:20 AM, Jan-Willem Maessen
jmaes...@alum.mit.eduwrote:

 Indeed, this is great to know.  I can't help but notice that there is no
 documentation of any kind at all for the Monoid instance of Ordering; how
 were we supposed to know this behavior existed in the first place, except by
 hunting down the source code for the instance declaration?


It seems we have no good way to associate documentation with instances.

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


Re: [Haskell-cafe] Comparing on multiple criteria

2008-12-21 Thread David Menendez
On Sun, Dec 21, 2008 at 11:20 AM, Jan-Willem Maessen
jmaes...@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!)

 Indeed, this is great to know.  I can't help but notice that there is no
 documentation of any kind at all for the Monoid instance of Ordering; how
 were we supposed to know this behavior existed in the first place, except by
 hunting down the source code for the instance declaration?

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.

-- 
Dave Menendez d...@zednenem.com
http://www.eyrie.org/~zednenem/
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe