
Am Freitag 16 Oktober 2009 01:19:34 schrieb Ryan Temple:
I am wanting to sort a list of tuples by the first and then the second item in the tuple. So [(1,2),(4,2),(2,5)] would become [(1,2),(2,5),(4,2)]
That's what "sort" already does: sort [(1,2),(4,2),(2,5),(4,1)] gives [(1,2),(2,5),(4,1),(4,2)]
I am attempting to use the Sorty function but don't seem to be having much luck
tuplesort :: [(a,b)] -> [(a,b)] tuplesort [(_,_)]
That defines tuplesort on lists containing exactly one pair, probably not what you want.
= sortBy (comparing fst)
This doesn't conform to the type you gave. "sortBy (comparing fst)" has type Ord a => [(a,b)] -> [(a,b)] So your definition of tuplesort has type Ord a => [(c,d)] -> [(a,b)] -> [(a,b)] which doesn't look like the type of a sorting function.
-- this is an attempt to organise by the first element in the tuple
You would achieve that by tuplesort = sortBy (comparing fst) or, eta-expanded, tuplesort xs = sortBy (comparing fst) xs But if you finally want to sort by the second component also (subordinate to sorting by the first component), it's much easier to go the whole way at once and use plain "sort".
Any help would be much appreciated