Hello Sukit, Friday, August 8, 2008, 3:52:51 AM, you wrote:
it requires use of typeclasses instance C f => C (a->f) curry (somef::(a->f)) (someas::[a]) = (somef (head someas)) (tail someas) and so on. look into hslua sources, for example: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hslua > 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 <[EMAIL PROTECTED]> 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 > <[EMAIL PROTECTED]> 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 >> > > -- Best regards, Bulat mailto:[EMAIL PROTECTED] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe