# [Haskell-beginners] Why does this list comprehension return an empty list?

Costello, Roger L. costello at mitre.org
Tue Jul 23 10:53:28 CEST 2013

```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

```