Home > Enterprise >  How to filter my list of tuples of two input lists?
How to filter my list of tuples of two input lists?

Time:11-25

I am trying to generate all possibles combinations from two lists and then only return those that match the lambda function. So I currently have the following code:

func :: [a] -> [b] -> ((a, b) -> Bool) -> [(a, b)]
func xs ys f = filter f (tup)
    where
        tup = concat(map (\x -> map (\y -> (x,y))ys) xs)

Currently I am able to generate all the possible combinations, but the filtering won't work.

Error for the input : func [1,2,3] [4,5] (\ a b -> a b > 6)

• Couldn't match expected type ‘Bool’ with actual type ‘(a, b) -> Bool’

• The lambda expression ‘\ a b -> a b > 7’ has two value arguments, but its type ‘(a, b) -> Bool’ has only one

How can I solve this?

I tried to use map instead of filter, but that did not work as well.

CodePudding user response:

Making a function with two arguments and making a function with a single 2-tuple argument use slightly different syntax:

\a b -> a b > 6 -- two arguments
\(a, b) -> a b > 6 -- one tuple argument
  • Related