"Это не запись"- ошибка при попытке сортировки списка
Я хочу отсортировать список по убыванию, но когда я использую ключевое слово.sort, я получаю сообщение об ошибке:
Это не запись, поэтому у нее нет полей для доступа!
106 | {модель | team = List.sort.map (\p -> {p | active = True}) model.teams, activOutput = True} ^^^^^^^^^ This
sort
значение является:List comparable -> List comparable
Но мне нужна запись с полем карты!
Это строка, которую я изменил и с которой я хочу отсортировать список.
Submit ->
{ model | teams = List.sort.map (\p -> {p | activated = True}) model.teams, activatedOutput = True}
1 ответ
.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