[Haskell-beginners] Why does this list comprehension return an empty list?
raabe at froglogic.com
Tue Jul 23 11:08:10 CEST 2013
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
f xs >>= \a ->
g xs >>= \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 at froglogic.com
www.froglogic.com - Multi-Platform GUI Testing
More information about the Beginners