use Deref;
/*
(G)eneric (A)ssociated (T)ypes
This is the example that was given in the Rust 1.65.0 release post:
https://blog.rust-lang.org/2022/11/03/Rust-1.65.0.html
*/
/// An `Iterator`-like trait that can borrow from `Self`
/// Can be implemented over smart pointers, like `Rc` or `Arc`,
/// in order to allow being generic over the pointer type
/// Allows borrowing an array of items. Useful for
/// `NdArray`-like types that don't necessarily store
/// data contiguously.