use std::iter::FlatMap instead of mdo::iter::UnboxedFlatMap