Resta al curry

Si queremos mapear una función que aumenta cada elemento de un rango en 1, podríamos escribir

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

pero supongo que la mayoría de la gente simplemente iría por

map (+1) [1..5]

en lugar. Pero esto obviamente no funciona con (-1) ya que es negativo.

Así que lo primero que me vino a la mente fue

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

lo que tendría sentido teniendo en cuenta cómo se define la resta en el Preludio (x - y = x + negate y), pero me parece un poco extraño. Entonces se me ocurrió

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

Esto de alguna manera me parece mejor, pero tal vez sea un poco demasiado complicado.

Ahora sé que esto no es gran cosa, pero me pregunto si me estoy perdiendo una forma más obvia de escribir esto. Si no, ¿cuál de las 2 formas preferiría? Realmente solo pregunto porque a menudo son pequeños detalles como este los que hacen que su código sea más idiomático y, por lo tanto, agradable para otros desarrolladores que tienen que leerlo.

Solución

Ahora que tengo un par de respuestas, creo que mi favorito personal es

map (subtract 1) [1..5]

seguido por

map pred [1..5]

principalmente porque el primero es realmente explícito y nadie necesita adivinar / buscar quépred significa (predecesor).

Respuestas a la pregunta(4)

Su respuesta a la pregunta