Aditya Siram wrote: ] I am trying to write a function 'applyArguments' which takes a ] function and a list and recursively uses element each in the list as ] an argument to the function. I want to do this for any function taking ] any number of arguments. ] ] applyArgument f (arg) = f arg ] applyArgument f (arg:args) = applyArgument (f arg) args ] ] This has failed in Hugs, so my question is: Can I conceptually do ] this? If so, what is the type signature of this function?
OK, here's a program that is similar to your applyArgument. Instead of the arguments in a list, it stores them in a nested tuple, so that we can have different types of arguments. You'll have to use the "-98" option when using Hugs. Also, it doesn't seem to interact well with type inference, so I had to provide type signatures for the function "f" and some of the parts of "args". Anyone know of a better way to define Apply so we could eliminate these type signatures? > {-# OPTIONS -fglasgow-exts #-} > > class Apply x y z | x y -> z where > apply :: x -> y -> z > > instance Apply (a->b) a b where > apply f x = f x > > instance Apply b as c => Apply (a->b) (a,as) c where > apply f (x,xs) = apply (f x) xs > > f :: Int -> Double -> String -> Bool -> Int > f x y z True = x + floor y * length z > f x y z False= x * floor y + length z > > args = (1::Int,(3.1415::Double,("flub",True))) > > main = print $ apply f args _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe