[trac@galois.com: Re: [GHC] #1218: Add sortNub and sortNubBy to Data.List]

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Wed Mar 21 07:29:32 EDT 2007


On Wed, 2007-03-21 at 11:48 +0100, Bertram Felgenhauer wrote:
> Duncan Coutts wrote:
> > So can anyone break this hypothesis?
> > 
> >   nub . sort = map head . group . sort
> 
> Just make Eq and Ord instances that are completely unrelated, say

I had to compile the code and go thorough it to convince myself, but yes
as you say I'd fallen into the trap of 'believing' <= and == etc. I was
assuming that sort would put 'equal' elements next to each other in the
result but of course with compare x y == EQ not being the same as x == y
that's not the case. Sigh.

Thanks for the example.

I want type classes with real property conditions. I don't mind if
they're checked or not, but I want to be able to break people's code if
they don't obey the properties and optimise the code for the rest of us.

class Ord a => OrdReallyTruely a where
  ...

then I want to use ghc rules that match on the subset of Ord types that
are instances of OrdReallyTruely and be able to do the appropriate
transformations.

forall (xs :: OrdReallyTruely a => [a]).
   nub (sort xs) = map head (group (sort xs))

Duncan



More information about the Libraries mailing list