
Hi Folks, I have a list of singletons: xs = [("a")] f is a function that, given an argument x, it returns the argument: f x = x g is a function that, given an argument x, it returns the empty list: g x = [] I have a list comprehension that extracts the singletons from xs using f and g, and creates a pair from their output: [(a,b) | a <- f xs, b <- g xs] I executed this and the result is the empty list: [] That is odd. Why is the empty list the result? Consider this list comprehension that extracts the singletons from xs using f only, and creates a pair by matching up the singleton from xs with the empty list: [(a,[]) | a <- f xs] The result is this: [("a",[])] That is the result that I expected to get with the first list comprehension. Would you explain why this: [(a,b) | a <- f xs, b <- g xs] yields [], whereas this: [(a,[]) | a <- f xs] yields [("a",[])]? Also, how would I modify this: [(a,b) | a <- f xs, b <- g xs] so that it produces this: [("a",[])] /Roger