That's pretty cool, and I wish I had thought of it for SRFI 158. However, the word
"scatter" suggests taking things from a single place and putting them into many places.
I think a better name would be gconcatenate.
Indeed, Gauche has gconcatenate.
There can be a few variations to "flatten"-like procedures. Borrowing Haskell-like type notation,
it's easier to see:
(cut apply gappend <>) :: [(Generator a)] -> Generator a
gconcatenate :: Generator Generator a -> Generator a
gflatten :: Generator [a] -> Generator a