In addition to what others have said, you could use pointfree[1] to do this automagically!
Hello,
as I am newbie to Haskell and my introductory question is:
given functions say f and g with type signatures
f :: (Num a) => [a] -> [a] -> [(a,a)] // f takes two lists and zips them into one in some special way
g :: (Num a) => a -> [(a,a)] -> [a] // g using some Num value calculates list of singletons from list of pairs
of course g 0 :: (Num a) => [(a,a)] ->[a]
now I want to create function h :: (Num a) => [a] -> [a] -> [a] in such way
that (g 0) consumes output of f.
But when I try
Prelude> :t (g 0).f
I get an error:
<interactive>:1:9:
Couldn't match expected type `[(a0, a0)]'
with actual type `[a1] -> [(a1, a1)]'
Expected type: [a1] -> [(a0, a0)]
Actual type: [a1] -> [a1] -> [(a1, a1)]
In the second argument of `(.)', namely `f'
In the expression: (g 0) . f
In pointfull representation it works well
Prelude> let h x y = (g 0 (f x y))
How to do pointfree definition of h?
Ajschylos.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe