Technically this is just function call using method call syntax - × is treated as regular identifier (like someFunction) and it is perfectly legal to call obj .someFunction arg. So a .× b is not really different in that regard.
proc ×(a, b: set[char]): seq[(char, char)] =
for aIt in a:
for bIt in b: