Если у меня просто очень простой пользовательский тип данных:
data Person = Person {first_name :: String,
last_name :: String
} deriving (Ord, Eq, Show)
Если у меня есть список этих типов данных Person, и я хочу отсортировать его по last_name
тогда и только тогда, когда first_name
совпадает. Но я должен не сортировать first_name
. Просто позвоните по следующему, очевидно, не работает.
import Data.Function (on)
import Data.List (sortBy)
sortBy (compare `on` last_name ) persons
Как я могу решить это? Я согласен, что это довольно запутанно. Я хочу, чтобы, если у меня было следующее (это определенно не список пользовательских типов данных, я просто хочу показать это четко)
[("c","d"),("a","c"),("a","a")]
После сортировки хотелось бы получить
[("c","d"),("a","a"),("a","c")]
вместо
[("a","a"),("a","c"),("c","d")]
Таким образом, идея состоит в том, что первый элемент все еще должен появляться вначале, поскольку он не совпадает с first_name
с двумя другими. Это возможно? Спасибо!