
On 2013-07-23 10:53, Costello, Roger L. wrote:
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 how the list comprehension looks like when written as monadic code: f xs >>= \a -> g xs >>= \b -> return (a,b) I.e. "for each element 'a' drawn from the result of "f sx", draw an element 'b' from the result of "g xs" and yield a new element "(a,b)". So the resulting list will always be 'length (f xs) * length (g xs)' items in length. Consequently, if either of the two lists is empty, the result will be empty. -- Frerich Raabe - raabe@froglogic.com www.froglogic.com - Multi-Platform GUI Testing