Section of an infix operator

From HaskellWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

In Haskell there is a special syntax for partial application on infix operators. Essentially, you only give one of the arguments to the infix operator, and it represents a function which intuitively takes an argument and puts it on the "missing" side of the infix operator.

  • (2^) (left section) is equivalent to (^) 2, or more verbosely \x -> 2 ^ x
  • (^2) (right section) is equivalent to flip (^) 2, or more verbosely \x -> x ^ 2


Like partial application and lambda abstraction, sectioning provides a convenient way of writing some functions without having to explicitly name them:

  • (1+) (unsugared: (+) 1) is the "increment" function,
  • (2*) is the "double" function,
  • ('\t':) is the "indent" function,
  • (`elem` "AEIOU") is the "is-capital-vowel-in-English" function (ignoring the "sometimes Y").

Note: as an exception, the "-" (subtraction) operator cannot do a right section, because that would be interpreted as unary negation in Haskell syntax. The Prelude function "subtract" is provided for this purpose. Instead of (- e), you need to write (subtract e).
Note: Iterated sections are also possible, as long the associativity is correct: (1+2+). The famous (but mostly useless) "Bender" operator is (:8:[]).

See also