[Haskell-cafe] Are there arithmetic composition of functions?
conal at conal.net
Wed Mar 21 17:38:56 CET 2012
This general applicative pattern for numbers is packed up in the
applicative-numbers package .
In addition to Ralf's paper, there's a discussion in section 10 of
*Denotational design with type class morphisms*  and an application in
sections 2 & 4 of *Beautiful differentiation* .
On Mon, Mar 19, 2012 at 9:58 PM, wren ng thornton <wren at freegeek.org> wrote:
> On 3/19/12 12:57 PM, sdiyazg at sjtu.edu.cn wrote:
>> By arithmetic I mean the everyday arithmetic operations used in
>> In signal processing for example, we write a lot of expressions like
>> f(t)=g(t)+h(t)+g'(t) or f(t)=g(t)*h(t).
>> I feel it would be very natural to have in haskell something like
> You should take a look at Ralf Hinze's _The Lifting Lemma_:
> The fact that you can lift arithmetic to work on functions comes from the
> fact that for every type T, the type (T->) is a monad and therefore is an
> applicative functor. The output type of the function doesn't matter, except
> inasmuch as the arithmetic operations themselves care.
> This pattern has been observed repeatedly, even long before Haskell was
> around. But one reason it's not too common in production Haskell code is
> that it's all too easy to make a mistake when programming (e.g., you don't
> mean to be adding functions but you accidentally forget some argument), and
> if you're using this trick implicitly by providing a Num instance, then you
> can get arcane/unexpected/unhelpful error messages during type checking.
> But then you do get some fun line noise :)
> twiceTheSumOf = (+) + (+)
> squareTheSumOf = (+) * (+)
> cubeTheSumOf = (+) * (+) * (+)
> -- N.B., the names only make sense if all arguments
> -- are numeric literals. Don't look at the types.
> addThreeThings = (+) . (+)
> addFourThings = (+) . (+) . (+)
> addFiveThings = (+) . (+) . (+) . (+)
> Live well,
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe