fn slice_rotated_left<'a, T>(slice: &'a [T], mid: usize) -> impl Iterator<Item = &T> + 'a {
    let begin = &slice[mid..];
    let end = &slice[..mid];
    begin.iter().chain(end.iter())
}
// similar to slice::rotate_left, but it returns an iterator, doesn't mutate input
similar to slice::rotate_left, but it returns an iterator, doesn't mutate input
similar to slice :: rotate_left but it returns an iterator doesn ' t mutate input
fn slice_rotated_left<'a, T>(slice: &'a [T], mid: usize) -> impl Iterator<Item = &T> + 'a {
    let begin = &slice[mid..];
    let end = &slice[..mid];
    begin.iter().chain(end.iter())
}
fn slice_rotated_left < ' a , T > ( slice : & ' a [ T ] , mid : usize ) -> impl Iterator < Item = & T > + ' a { let begin = & slice [ mid .. ] ; let end = & slice [ .. mid ] ; begin . iter ( ) . chain ( end . iter ( ) ) }
similar to slice::rotate_left, but it returns an iterator, doesn't mutate input
similar to slice :: rotate_left but it returns an iterator doesn ' t mutate input
slice
&'a [T]
mid
usize
slice
&'a [T]
mid
usize