неверный синтаксис

мы хотим отобразить функцию, которая увеличивает каждый элемент диапазона на 1, мы могли бы написать

map (\x -> x + 1) [1..5]

но я думаю, что большинство людей просто

map (+1) [1..5]

вместо. Но это, очевидно, не работает с (-1), поскольку это отрицательный.

Итак, первое, что пришло в голову, было

map (+(-1)) [1..5]

что имеет смысл, учитывая, как вычитание определяется в Prelude (x - y = x + negate y), но выглядит немного странно для меня. Я тогда придумала

map (flip (-) 1) [1..5]

Это как-то выглядит лучше для меня, но, возможно, немного сложнее.

Теперь я знаю, что в этом нет ничего страшного, но мне интересно, не хватает ли мне более очевидного способа написать это? Если нет, какой из двух способов вы бы предпочли? Я просто спрашиваю, потому что часто такие мелкие детали делают ваш код более идиоматичным и, следовательно, приятным для других разработчиков, которые должны его читать.

Решение

Теперь, когда я получил пару ответов, я думаю, что мой личный фаворит

map (subtract 1) [1..5]

с последующим

map pred [1..5]

в основном потому, что первый действительно явный и никому не нужно гадать / искать чтоpred значит (предшественник).

Ответы на вопрос(1)

Ваш ответ на вопрос