Как я понял, логика была такая Option::and_then - это bind, поэтому Iterator::and_then должно быть == Iterator::flat_map. Но есть операции, которые не влезают в монаду. А имена им давать надо.
Как я уже и говорил, абстрактные операции на монадах в применении к конкретным монадам дают совершенно различные знакомые программистам операции: (используя примеры торта) ;, await, ?, and_then, flat_map, и т.п.