> :t (+1)
(+1) :: Num a => a -> a
> :t (-1)
(-1) :: Num a => a
Почему вторая не является функцией? Должен ли я писать (+(-1)) или есть лучший способ?
> :t (+1)
(+1) :: Num a => a -> a
> :t (-1)
(-1) :: Num a => a
Почему вторая не является функцией? Должен ли я писать (+(-1)) или есть лучший способ?
Это связано с тем, что (-1) интерпретируется как отрицательный, однако (+1) интерпретируется как каррическая функция (\x->1+x).
В haskell (a **) - синтаксический сахар для (**) a, а (** a) - (\x -> x ** a). Однако (-) является частным случаем, поскольку он является и унарным оператором (отрицательным), и двоичным оператором (минус). Поэтому этот синтаксический сахар не может быть применен однозначно здесь. Если вы хотите (\x -> a - x), вы можете написать (-) a, и, как уже было сказано в вычитании вытравливания, вы можете использовать функции negate и subtract для устранения неоднозначности между унарными и двоичными функциями -.
Нужно ли писать (+ (- 1)) или есть лучший способ?
Я только что нашел функцию под названием subtract, поэтому я также могу сказать subtract 1. Я нахожу это вполне читаемым: -)
(-1) является отрицательным, как отмечали другие. Вычитание одной функции - \x -> x-1, flip (-) 1 или действительно (+ (-1)).
- рассматривается как частный случай в грамматике выражений . + не является, по-видимому, потому, что положительные литералы не нуждаются в лидирующем плюсе, и это может привести к еще большей путанице.
Изменить. В первый раз я ошибался. ((-) 1) - это функция "вычесть из одного" или (\x -> 1-x).