Функция Haskell sortBy
принимает (a → a → Ordering)
качестве первого аргумента. Может ли кто-нибудь научить меня тому, что такое рассуждение? Моя история полностью основана на языках, в которых вместо этого используется аналогичная функция take (a → a → Bool)
, поэтому необходимость написать ту, которая возвращает LT
/GT
была немного запутанной.
Это стандартный способ сделать это на статически типизированных/чисто функциональных языках? Это свойственно ML-спущенным языкам? Есть ли какое-то фундаментальное преимущество, которого я не вижу, или какой-то скрытый недостаток вместо использования логических значений?
Подводя итог:
-
Ordering
неGT | LT
GT | LT
, это на самом делеGT | EQ | LT
GT | EQ | LT
GT | EQ | LT
(очевидно,GHC
не использует это под капотом для целей сортировки, но все же) -
Возвращение трихотомического значения более точно моделирует возможные результаты сравнения двух элементов
-
В некоторых случаях использование
Ordering
вместоBool
сохранит сравнение -
Использование
Ordering
упрощает реализацию стабильных сортировок. -
Использование
Ordering
проясняет читателям, что проводится сравнение между двумя элементами (логическое значение по сути не несет этого значения, хотя я чувствую, что многие читатели примут это)
Я предварительно принимаю ответ Карла и публикую вышеизложенное резюме, так как ни один ответ не затронул все пункты на момент этого редактирования.