Num instance for functions: Difference between revisions
(Category:Style) |
(Refurbish very patchy article to contain the essentials) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
It is possible to write a <hask>Num</hask> instance for functions in Haskell: | |||
<haskell> | |||
instance Num b => Num (a -> b) where | |||
negate = fmap negate | |||
(+) = liftA2 (+) | |||
(*) = liftA2 (*) | |||
fromInteger = pure . fromInteger | |||
abs = fmap abs | |||
signum = fmap signum | |||
</haskell> | |||
This allows writing expressions of the form | |||
<haskell> | |||
> (sin^2 + cos^2) 123.4 | |||
1.0 | |||
</haskell> | |||
where functions can be added like <hask>Num</hask>bers, leaving their arguments open for later. | |||
The usefulness of this instance is debatable, and it is not currently part of [[Language and library specification|the language report]] or defined in any popular library. | |||
== See also == | == See also == | ||
Line 30: | Line 28: | ||
* http://www.haskell.org/pipermail/haskell-cafe/2006-October/019105.html | * http://www.haskell.org/pipermail/haskell-cafe/2006-October/019105.html | ||
* http://www.haskell.org/pipermail/haskell-cafe/2001-February/001531.html | * http://www.haskell.org/pipermail/haskell-cafe/2001-February/001531.html | ||
* http://augustss.blogspot.com/2009/02/regression-they-say-that-as-you-get.html | |||
[[Category:Humor]] | [[Category:Humor]] | ||
[[Category:FAQ]] | [[Category:FAQ]] | ||
[[Category:Style]] | [[Category:Style]] |
Latest revision as of 01:24, 28 December 2014
It is possible to write a Num
instance for functions in Haskell:
instance Num b => Num (a -> b) where
negate = fmap negate
(+) = liftA2 (+)
(*) = liftA2 (*)
fromInteger = pure . fromInteger
abs = fmap abs
signum = fmap signum
This allows writing expressions of the form
> (sin^2 + cos^2) 123.4
1.0
where functions can be added like Num
bers, leaving their arguments open for later.
The usefulness of this instance is debatable, and it is not currently part of the language report or defined in any popular library.
See also
- The applicative-numbers package, which generates numeric class instances for arbitrary applicative functors (including functions).
- http://www.haskell.org/pipermail/haskell-cafe/2006-November/019374.html
- http://www.haskell.org/pipermail/haskell-cafe/2006-October/019105.html
- http://www.haskell.org/pipermail/haskell-cafe/2001-February/001531.html
- http://augustss.blogspot.com/2009/02/regression-they-say-that-as-you-get.html