Diagonalising list comprehensions
[ exp // qualifiers ]
Syntax and scope rules exactly as for standard list comprehensions, the
only difference being the use of `//' in place of the vertical bar. The
order of enumeration of the generators is such that it is guaranteed
that every possible combination of values will be reached eventually.
The diagonalisation algorithm used is "fair" in the sense that it gives
equal priority to all of the generators.
For example the value of [f x y//x<-[1..4]; y