.sort
- это не ключевое слово, это функция внутри модуля List
.Существует несколько типов функций сортировки.
Сигнатура sort
:
sort : List comparable -> List comparable
Это означает, что значения в самих списках должны быть comparable
, что имеет особое значениев вязеВ частности, сопоставимы только встроенные вещи, такие как числа и строки.Пользовательские типы несопоставимы и не являются логическими значениями.
Может показаться странным слышать, что логические значения не соответствуют классификации comparable
, но примите во внимание следующее: что означает задавать вопрос, это True
больше или меньше False
в каждом сценарии?Скорее, вам придется придумать собственное определение того, как сортировать ваш пользовательский объект.
И для этого мы можем использовать функцию List.sortBy
, которая имеет такую подпись:
sortBy : (a -> comparable) -> List a -> List a
Это может сортировать список чего угодно, если вы предоставляете функцию, которая определяет, как сортировать вещь.
Так что, если вы хотите, чтобы те команды, где activated
- это True
, были показанывверху вы можете использовать это для сортировки:
List.sortBy (\x -> if x.activated then 0 else 1) model.teams
Принимая во внимание, что если вы хотите, чтобы команды с activated
равнялись False
были наверху, вы можете использовать это:
List.sortBy (\x -> if x.activated then 1 else 0) model.teams