Difference between revisions of "Section of an infix operator"

From HaskellWiki
Jump to navigation Jump to search
(Iterated)
Line 12: Line 12:
   
 
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 <hask>(- e)</hask>, you need to write <hask>(subtract e)</hask>.
 
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 <hask>(- e)</hask>, you need to write <hask>(subtract e)</hask>.
  +
  +
Note: Iterated sections are also possible, as long the associativity is correct: <hask>(1+2+)</hask>. The famous (but mostly useless) "Bender" operator is <hask>(:8:[])</hask>.
   
 
== See also ==
 
== See also ==

Revision as of 17:56, 31 March 2017

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