
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
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
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:Bulat.Ziganshin@gmail.com