Cool! If you're looking for ideas, singleton types with dimension encoded in the name is one way: <https://github.com/breandan/kotlingrad/blob/master/src/main/kotlin/edu/umontreal/kotlingrad/samples/ToyMatrixExample.kt#L186-L204>
For array literals, you can use function arity to disambiguate: <https://github.com/breandan/kotlingrad/blob/master/src/main/kotlin/edu/umontreal/kotlingrad/samples/ToyVectorExample.kt#L212-L220>
Otherwise, you can always fall back to runtime shape checking for dynamically sized collections: <https://github.com/breandan/kotlingrad/blob/d13a0b057f7adfc9b35b5618b2ba25247aaa85a0/src/main/kotlin/edu/umontreal/kotlingrad/dependent/Vec.kt#L6>