Section of an infix operator
From HaskellWiki
(Difference between revisions)
(sectioning examples taken from article Currying) 

Line 1:  Line 1:  
−  In Haskell there is a special syntax for [[partial application]] on [[infix operator]]s. 
+  In Haskell there is a special syntax for [[partial application]] on [[infix operator]]s. 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. 
−  * <hask>(2^)</hask> is equivalent to <hask>(^) 2</hask> 
+  * <hask>(2^)</hask> (left section) is equivalent to <hask>(^) 2</hask>, or more verbosely <hask>\x > 2 ^ x</hask> 
−  * <hask>(^2)</hask> is equivalent to <hask>flip (^) 2</hask> 
+  * <hask>(^2)</hask> (right section) is equivalent to <hask>flip (^) 2</hask>, or more verbosely <hask>\x > x ^ 2</hask> 
Line 10:  Line 10:  
* <hask>('\t':)</hask> is the "indent" function, 
* <hask>('\t':)</hask> is the "indent" function, 

* <hask>(`elem` "AEIOU")</hask> is the "iscapitalvowelinEnglish" function (ignoring the "sometimes Y"). 
* <hask>(`elem` "AEIOU")</hask> 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 <hask>( e)</hask>, you need to write <hask>(subtract e)</hask>. 

== See also == 
== See also == 

* [[Currying]] 
* [[Currying]] 

−  +  * [http://www.haskell.org/onlinereport/exps.html#sections Haskell report: Sections]  see for more details 

[[Category:Glossary]] 
[[Category:Glossary]] 
Latest revision as of 21:40, 1 February 2009
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.
 (left section) is equivalent to(2^), or more verbosely(^) 2\x > 2 ^ x
 (right section) is equivalent to(^2), or more verboselyflip (^) 2\x > x ^ 2
Like partial application and lambda abstraction, sectioning provides a convenient way of writing some functions without having to explicitly name them:
 (unsugared:(1+)) is the "increment" function,(+) 1
 is the "double" function,(2*)
 is the "indent" function,('\t':)
 is the "iscapitalvowelinEnglish" function (ignoring the "sometimes Y").(`elem` "AEIOU")
( e)
(subtract e)
[edit] See also
 Currying
 Haskell report: Sections  see for more details