[Haskell-cafe] Increasing number of parameters
Jacek Generowicz
jacek.generowicz at cern.ch
Fri Oct 15 09:40:06 EDT 2010
On 2010 Oct 15, at 11:38, Jacek Generowicz wrote:
> [...]
> So I'm trying to get to grips with a simpler variation on the same
> theme, and I'm still failing. I'm trying to write something along
> the lines of
>
> addArg :: nArgFn -> a -> nPlus1ArgFn
> addArg fn a = (a+) <---- fn where
> <---- = something which applies its right parameter to however
> many arguments it needs and feeds the result to the left parameter
>
> in order to allow me to say
>
> sum2 = (+)
> sum3 = addArg sum2
> sum4 = addArg sum3
>
> etc.
-- OK, I've understood.
-- You use an accumulator to keep track of what has been done with the
-- arguments that have been seen so far, and addArg takes one more
-- argument, each time, and mixes it in with what is already there.
-- I smell a monad.
addArgSum :: (Num a) => (a -> t) -> a -> a -> t
addArgSum fn acc arg = fn (acc + arg)
sum1' = id
sum2' = addArgSum sum1'
sum3' = addArgSum sum2'
-- And here's a more general version.
addArg combine fn acc arg = fn (combine arg acc)
sum1 = id
sum2 = addArg (+) sum1
sum3 = addArg (+) sum2
sum4 = addArg (+) sum3
-- But I don't really get why the following leads to complaints about
-- infinite types.
-- sumN n = iterate (addArg (+)) id
More information about the Haskell-Cafe
mailing list