Well first of all if you do not want duplicates, you can add the constraint i <= a
. Or you can thus rewrite your code like:
for (int i=0; i<100; i++)
for (int a=i; a<100; a++)
foo = (i, a);
Next we can use list comprehension for this:
[(i,a) | i <- [0..99], a <- [i..99]]
So we let i
iterate over 0..99
(both inclusive), and a
over i..99
. If we take smaller bounds (6 instead of 99) we obtain:
Prelude> [(i,a) | i <- [0..6], a <- [i..6]]
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(2,2),(2,3),(2,4),(2,5),(2,6),(3,3),(3,4),(3,5),(3,6),(4,4),(4,5),(4,6),(5,5),(5,6),(6,6)]