
On Thu, 4 Mar 2021, Ben Franksen wrote:
If we do embrace that viewpoint, then I'd say we should go all the way and interpret indices modulo (non-negative) structure size! This makes (safe) indexing total (for non-empty structures) and allows things like xs !! (-1) == last xs as in Perl and some other languages. Unsafe indexing (as in the vector package) could remain as is for performance critical code.
This seems to be the MatLab way of solving problems: Just don't talk about them anymore. :-) However, I had the idea of adding a Cyclic shape to my array library: http://hackage.haskell.org/package/comfort-array-0.4/docs/Data-Array-Comfort... In comfort-array I use distinct types for the array shape and its indices, where the index type is a type function of the shape type. I had the plan to add a Cyclic shape type in order to better support the Discrete Fourier Transform. A DFT actually transforms a cyclic signal to a cyclic frequency spectrum. This means, a Fourier transform library like fftw would still transform an array with indices from 0 to n-1, but you can access the frequency (-1) with index (-1) although it is stored at index (n-1).