Thanks Tom and Henning for your response. Let me put the question in another way by generalizing and tweaking it a little bit.

How in Haskell that I can create a function that curries any other function, which receives multiple parameters, by using a the input from a list (same data type) or a tuple (mixed data type) such that it either returns another closure (if not all parameters are curried) or the final value of the computation (when all parameters are known)?

Ed

On Thu, Aug 7, 2008 at 12:49 PM, Tom Nielsen <tanielsen@gmail.com> wrote:
Maybe you want something like

curryWithList :: ([a]->b)->[a]->([a]->b)
curryWithList f lst1= \lst2 ->f (lst1++lst2)

addThemUp = sum
curried = curryWithList addThemUp [1,2,3,4]
curried [5] =15

On Thu, Aug 7, 2008 at 8:35 PM, Henning Thielemann
<lemming@henning-thielemann.de> wrote:
>
> On Thu, 7 Aug 2008, Sukit Tretriluxana wrote:
>
>> Dear Haskell experts,
>>
>> I am currently studying Groovy language. An experiment I did with its
>> closure is to perform closure/function "curry" using an array containing the
>> values for the parameter binding. See the sample below.
>>
>> int addThemUp(a,b,c,d,e) { a+b+c+d+e }
>> def arrayCurry(arr, cls) { arr.inject(cls) { c, v -> c.curry(v) } }
>> println addThemUp(1,2,3,4,5)
>> println arrayCurry([1,2,3,4,5], this.&addThemUp)()
>> println arrayCurry([1,2,3,4], this.&addThemUp)(5)
>>
>> The printouts from the above code are the same, verifying that the code
>> works fine. Then I come to ask myself how I can do the same in Haskell. I'm
>> not a Haskell expert so I couldn't figure it. I wonder if you guys could
>> shed some light on this.
>
> I do not know Groovy, but maybe you want something like
>
>  addThemUp :: Num a => (a,a,a,a,a) -> a
>  addThemUp (a,b,c,d,e) = a+b+c+d+e
>
>  -- should be better named list5Curry or so
>  arrayCurry :: ((a,a,a,a,a) -> a) -> [a] -> a
>  arrayCurry cls [a,b,c,d,e] = cls (a,b,c,d,e)
>
>  print (addThemUp(1,2,3,4,5::Int))
>  print (arrayCurry addThemUp [1,2,3,4,5::Int])
>
> However, it's hardly of any use, since you won't use a list if the number
> of elements is fixed (and small) or if the elements even must have
> distinct types.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>