pub trait JoinStrsExt: Sized
{
    /// Join an iterator of `str` with a seperator
    fn join(self, with: &str) -> String;
}

impl<T,I> JoinStrsExt for I
where I: Iterator<Item=T>,
      T: AsRef<str>
{
    fn join(self, with: &str) -> String
    {
	let mut output = String::new();
	let mut first=true;
	for string in self
	{
	    if !first {
		output.push_str(with);
	    }
	    let string = string.as_ref();
	    output.push_str(string);
	    first=false;
	}
	output
    }
}