Personal tools

Section of an infix operator

From HaskellWiki

Revision as of 17:58, 31 March 2017 by Heisenbug (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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+)
    (+) 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:
. The famous (but mostly useless) "Bender" operator is

See also