struct Range[B1, B2]((B1, B2));
impl [B1, B2; Fork[B1], Fork[B2]]: Fork[Range[B1, B2]];
impl [B1, B2; Drop[B1], Drop[B2]]: Drop[Range[B1, B2]];
impl [B1, B2; Fork[B1], Fork[B2]]: Fork[Range[B1, B2]];
impl [B1, B2; Drop[B1], Drop[B2]]: Drop[Range[B1, B2]];
trait Bound[B, T];
fn contains[B1, B2, T; Bound[B1, T], Bound[B2, T]](...: &Range[B1, B2], value: &T) -> Bool;
trait Step[T];
impl exclusive_iter[T; Fork[T], Drop[T], Ord[T], Step[T]]: Iterator[Range[Inclusive[T], Exclusive[T]], T];
impl inclusive_iter[T; Fork[T], Drop[T], Ord[T], Step[T]]: Cast[Range[Inclusive[T], Inclusive[T]], InclusiveIter[T]];
struct InclusiveIter[T](...);