Сортировка кортежей в списках haskell

Я хотел бы отсортировать список кортежей по третьему или четвертому элементу (скажем, c или d) в списке типа:

myList = [(a,b,c,d,e)]

Я знаю, является ли тип кортежа (a,b) Я могу использовать следующий подход:

mySort xmyList = sortBy (compare `on` snd) x

Но тип sortBy не будет работать с кортежами, длина которых больше двух (поэтому, очевидно, нет смысла писать функцию доступа для thd или же fth):

(a -> a -> Ordering) -> [a] -> [a]

1 ответ

Решение

Но тип sortBy не будет работать с кортежами длиной более двух

Нет, это действительно работает для любого списка. Например, если вы хотите отсортировать c, просто делать:

mySort xmyList = sortBy (compare `on` (\(a,b,c,d,e) -> c)) x

или же

mySort xmyList = sortBy (comparing thirdOf5) x
   where thirdOf5 (_,_,c,_,_) = c
Другие вопросы по тегам