Yes, N is automatically inferred at compile-time. I also don't think you need to use the heap but a heap object initialized once and never deallocated works fine too I guess.
Here you can find a definition from scratch of a custom static array type but that works like a seq from the outside. I needed it to improve the performance of my tensor library (heap allocations in loop are performance killers): [https://github.com/mratsim/Arraymancer/blob/master/src/tensor/backend/metadataArray.nim#L17](https://github.com/mratsim/Arraymancer/blob/master/src/tensor/backend/metadataArray.nim#L17)