pub fn collection<C: Collection<Item = O>, I: Input, O, F>( input: &mut I, start: I::Token, item: F, seperator: I::Token, end: I::Token) -> Result<C, I>where F: FnMut(&mut I) -> Result<O, I>,