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 "is-capital-vowel-in-English" function (ignoring the "sometimes Y"). | * <hask>(`elem` "AEIOU")</hask> 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 <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]] | ||
[[Category:Syntax]] | [[Category:Syntax]] | ||
Current revision
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 "is-capital-vowel-in-English" function (ignoring the "sometimes Y").(`elem` "AEIOU")
(- e)
(subtract e)
See also
- Currying
- Haskell report: Sections - see for more details
