Haskell produto cartesiano de listas infinitas
Quero gerar um espaço de vetores a partir de um par de bases, parecido com:
genFromPair (e1, e2) = [x*e1 + y*e2 | x <- [0..], y <- [0..]]
Quando examino a saída, parece que estou recebendo[0, e2, 2*e2,...]
(ou seja,x
nunca fica acima de 0). O que faz sentido quando penso em como escreveria o código para entender essa lista.
Eu escrevi um código para extrair "conchas" da origem (primeiro as entradas com a norma 0, depois com a norma 1, depois com a norma 2 ...), mas isso é meio irritante e específico para Z ^ 2 - eu precisa reescrevê-lo para Z ^ 3 ou Z [i] etc. Existe uma maneira mais limpa de fazer isso?