Thanks for the answer. It's interesting that you mention this is an
often-requested feature because it does seem useful to me. However, I
have not been able to google this (maybe I am using the wrong terms)
and others have 'suggested' to me that I am doing something wrong if I
ever need to do it.
Well, as you can see, no-one did that here
Some people hate lambdas in general, too, just because they weren't
there in the good old days. It's not a good reason to skip on features
that make code clearer and smaller, though.
F# has that feature built-in, by the way:
seq { yield 1; yield! [2; 3]; for x in xs yield x*x; ... }
and yes, it is very convenient to have in practice, once you start
using it. Well, just like lambdas
I am actually using the iterator to write asynchronous code in a
synchronous fashion, using the AsyncEnumerator class from the rather
amazing/insane wintellect Power Threading library - hence I think the
yield return model is basically necessary. Thanks to all who suggested
alternatives however.
Yep, I went and had a look at that, and it seems to be heavily
centered around iterators specifically.
I was weaned on an OO paradigm and while happy to wade in other models
I'm not quite ready to start deep sea diving

Sadly this will wait
until I have a little more time (and brain capacity).
Gladly, F# is a decent OO language as well (since it fully supports
the .NET object model as it is), and ML legacy means that it has all
the stuff we've got used to (e.g. "while" and "for" loops, mutable
variables, etc). I find that just using it for the extra sugar that it
gives - ADTs, pattern matching, type inference, and yes, "seq" and
"async" blocks - is often worth it already.