use std::num::Int; pub struct RangeIncl { state: Option, end: T, } pub fn range_incl(begin: T, end: T) -> RangeIncl { RangeIncl { state: Some(begin), end: end } } trait One : Int { fn my_one(_: Option) -> Self { Int::one() } } impl One for T where T: Int {} impl Iterator for RangeIncl { type Item = T; fn next(&mut self) -> Option<::Item> { match self.state { Some(current) => { self.state = if current == self.end { None } else { Some(current + One::my_one(None::)) }; Some(current) }, None => { None } } } }