
So, two ways you could do it. I assume your current function looks like: toPairs :: [a] -> [a] -> [[a]] toPairs [] _ = [] toPairs (x:xs) ls = (zip (\y -> (x,y)) ls) : (toPairs xs ls) This returns something like: toPairs [1,2] [3,4] ===> [[(1,3),(1,4)],[(2,3),(2,4)]] We want a function that takes this list-of-lists to a list. We can certainly see the type as: foo :: [[a]] -> [a] `foo` would have to take all the elements of each list, and put it in a new one. We know of a function which combines the elements of two lists, (++) so really, our foo function would do: foo [] = [] foo (x:xs) = x ++ foo xs concatenating all of the lists together in order. But this is just a fold, we can call foo: foo = foldr (++) -- or foldl would work too. foldr is just the pattern above, abstracted away to a convenient function. Of course, this function comes up all the time, so we have one in the prelude, it's called. `concat`. and if you look up the source on hoogle, I believe you'll find the above. Nathan Holden wrote:
I don't know what you'd call it. Is there a function in any of the basic functions that does this something like this:
Sending two lists, [1,2,3] and [2,3,4] it would return [(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]. I managed to code my way into returning a list of lists, which works. But it seemed like a very basic list/matrix function, so I honestly believe that the Haskell designers probably would've put it in. ------------------------------------------------------------------------
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners