fn map_dot_separated<F: Fn(&str, &mut String)>(s: &str, f: F) -> String