Difference between revisions of "Section of an infix operator"
(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 toflip (^) 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 "iscapitalvowelinEnglish" 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
 Currying
 Haskell report: Sections  see for more details