Christopher Howard | 1 Sep 07:01 2013

function arithmetic?

Hi. I was just curious about something. In one of my math textbooks I 
see expressions like this

f + g

or

(f + g)(a)

where f and g are functions. What is meant is

f(a) + g(a)

Is there a way in Haskell you can make use of syntax like that (i.e., 
expressions like f + g and f * g to create a new function), perhaps by 
loading a module or something?
Eric Rasmussen | 1 Sep 07:58 2013
Picon

Re: function arithmetic?

Might not be exactly what you're looking for, but Control.Arrow has a rich set of operators that can be used to combine functions.

For instance, there's an example on http://en.wikibooks.org/wiki/Haskell/Understanding_arrows showing an addA function that can be used to apply two functions to the same argument and add the results:

Prelude> import Control.Arrow
Prelude Control.Arrow> let addA f g = f &&& g >>> arr (\ (y, z) -> y + z)
Prelude Control.Arrow> addA (+2) (*5) 10
62

If you're set on using the + and * operators, I'm guessing it's not possible to define a (sane) instance of Num for (->), but it would probably be instructive to try.



On Sat, Aug 31, 2013 at 10:01 PM, Christopher Howard <christopher.howard <at> frigidcode.com> wrote:
Hi. I was just curious about something. In one of my math textbooks I see expressions like this

f + g

or

(f + g)(a)

where f and g are functions. What is meant is

f(a) + g(a)

Is there a way in Haskell you can make use of syntax like that (i.e., expressions like f + g and f * g to create a new function), perhaps by loading a module or something?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Bob Ippolito | 1 Sep 08:14 2013

Re: function arithmetic?



On Sat, Aug 31, 2013 at 10:01 PM, Christopher Howard <christopher.howard <at> frigidcode.com> wrote:
Hi. I was just curious about something. In one of my math textbooks I see expressions like this

f + g

or

(f + g)(a)

where f and g are functions. What is meant is

f(a) + g(a)

Is there a way in Haskell you can make use of syntax like that (i.e., expressions like f + g and f * g to create a new function), perhaps by loading a module or something?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Carter Schonwald | 1 Sep 08:58 2013
Picon

Re: function arithmetic?

To clarify in Bobs remark : while you're still learning Haskell and the type system , things like lifted Num on functions can lead to some potentially confusing type errors. 


That said, it's absolutely doable, and can be a very nice / powerful tool when used appropriately. 

On Sunday, September 1, 2013, Bob Ippolito wrote:


On Sat, Aug 31, 2013 at 10:01 PM, Christopher Howard <christopher.howard <at> frigidcode.com> wrote:
Hi. I was just curious about something. In one of my math textbooks I see expressions like this

f + g

or

(f + g)(a)

where f and g are functions. What is meant is

f(a) + g(a)

Is there a way in Haskell you can make use of syntax like that (i.e., expressions like f + g and f * g to create a new function), perhaps by loading a module or something?

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
Roman Cheplyaka | 1 Sep 08:53 2013

Re: function arithmetic?

* Christopher Howard <christopher.howard <at> frigidcode.com> [2013-08-31 21:01:38-0800]
> Hi. I was just curious about something. In one of my math textbooks I
> see expressions like this
> 
> f + g
> 
> or
> 
> (f + g)(a)
> 
> where f and g are functions. What is meant is
> 
> f(a) + g(a)
> 
> Is there a way in Haskell you can make use of syntax like that (i.e.,
> expressions like f + g and f * g to create a new function), perhaps
> by loading a module or something?

Not the syntax, but the notion itself corresponds exactly to idiom
brackets/applicative functors. In this case it's the Reader applicative.

Roman
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe <at> haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Gmane