Есть ли короткий способ изменить возвращаемый тип функции?Изменение возвращаемого типа функции в Haskell?
Рассмотрите напримерcomparing
в Data.Ord
. Он возвращает Ordering
. Тем не менее меня интересует только то, являются ли эти два элемента равными или нет. Поэтому мне нужно преобразовать полученный Ordering
в Bool
.
прямо вперед, как я могу думать:
isEqualOn f x y = if comparing f x y==EQ then True else False
(или isEqualOn f x y = comparing f x y==EQ
, как здесь, как указано в комментариях).
Есть ли более композиционный способ сделать это (например, адаптировать comparing
или написать его бессмысленным образом), не выписывая все? В идеале я ищу что-то, что работает и над n-ary функциями.
- Обновление -
Как было предложено ответы/комментарии, конкретный пример выше (isEqualOn
) может быть реализована с использованием стандартного on
функцию on (==)
. Тем не менее, мой вопрос заключается в общей методике изменения типов возвращаемых функций в композиционном/бессмысленном виде, о чем свидетельствует подход SEC в комментариях.
@luqui уверен, что это короче. – tinlyx
О, я удалил его. Для справок в будущем это было 'isEqualOn f x y = сравнение f x y == EQ'. – luqui
И вообще у вас есть функция '(== EQ) :: Ordering -> Bool', и функция, которая дает вам то, где вы находитесь, где вы хотите быть, - это в основном самая композиционная вещь, которую вы можете иметь (хотя вы можете обнаружить, что это необоснованно звучит, пока вам не станет удобнее работать с композицией) – luqui