function cp(lists){ if (size(lists) == 0){ yield {} } else { for (lss : cp(lists[1..])){ for (ls : lists[0]) yield {ls} + lss } } } printAll(cp([{1,2,3,4}, "abc"]))