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