
On Fri, Apr 24, 2009 at 15:22, Martijn van Steenbergen
Hi Denis,
Denis Bueno wrote:
where the rCompare field would be a function that is based on the flags passed to the command-line problem. But this has an ugly asymmetry. Does anyone have any other ideas?
Here's a solution that is more symmetrical but not necessarily prettier:
newtype Wrap = Wrap { unwrap :: Record }
instance Ord Wrap where ... your compare function here ...
The problem here is that the order is fixed. Statically. I can't change it at runtime based on flags. (Right? Unless I'm missing something....)
But I don't think there's anything wrong with your original solution. You can write your own sortBy and hide (not export) the CompareRecord type:
sortBy :: (a -> a -> Ord) -> [a] -> IO [a] sortBy cmp = map unCR . sort . map (CompareRecord cmp)
Right, that's what I was thinking, too. The asymmetry was giving me the willies, though. =] Denis