>>350
do
  g1 <- listToGenerator [1..]
  g2 <- listToGenerator [1..]

としたら、g1とg2は相互に独立した、系列の違うジェネレータにならないと困るだろ?
つまり、listToGeneratorは呼ばれるたびに別のものを返さないといけないので、
普通の関数じゃなくてIO動作としてしか定義できない