List functions - "Under" operations

Tomasz Zielonka t.zielonka at students.mimuw.edu.pl
Sat Jan 17 14:45:01 EST 2004


On Sat, Jan 17, 2004 at 08:24:45AM -0500, ajb at spamcop.net wrote:
> 
> > Almost all of the times I use the "By" functions follow that pattern:
> > e.g.
> > sortFoos :: [Foo] -> [Foo]
> > sortFoos = sortBy (\x y -> compare (f x) (f y))
> 
> Just noting that this particular example has a very simple solution:
> 
>         http://haskell.org/hawiki/SchwartzianTransform
> 
> This technique probably doesn't solve all your problems, though.

It doesn't work when the type Foo doesn't belong to Ord class.

There is a simple technique which helped me when I wanted to make a
priority queue of elements with Double key, and IO () value.  I wanted
to use something from Edison, but most of relevant data structures
didn't distinguish key from value and insisted that element type belong
to Ord class.

I just introduced a wrapper type that provides a trivial "Egalite"
ordering.

    newtype NoOrd a = NoOrd { unNoOrd :: a }

    instance Eq (NoOrd a) where
	_ == _ = True

    instance Ord (NoOrd a) where
	_ `compare` _ = EQ

Then I could store in the queue values of type (Double, NoOrd (IO ()))

Best regards,
Tom

-- 
.signature: Too many levels of symbolic links


More information about the Libraries mailing list