>>392
そうね、flatMapは平坦化できることと要素数を変えられるのが特徴

モダンな言語だとジェネレータがあるからflatMapの出番はない気がする
ジェネレータがない言語だとflatMapを使うと良い感じ

たとえば組み合わせを列挙するコードはジェネレータで書くとこう

IEnumerable<ImmutableQueue<T>> CombinationGeneratorStyle<T>(ImmutableQueue<T> queue) {
 return F(queue, ImmutableQueue<T>.Empty);
 
 IEnumerable<ImmutableQueue<T>> F(ImmutableQueue<T> q, ImmutableQueue<T> r) {
  yield return r;

  for (; !q.IsEmpty; q = q.Dequeue()) {
   foreach (var sub in F(q.Dequeue(), r.Enqueue(q.Peek()))) {
    yield return sub;
   }
  }
 }
}