Dimensional

tabulate

defn

(Fn [(Ref (Fn [(Index (a (Size b) Opaque) Int)] c) d)] (a (Size b) c))

                    (tabulate f)
                

Tabulate maps a `lookup` function (any function that takes an `Index` as an
argument) over the positions of a sized functor.

`(tabulate (lookup f))= (id f)`

To make this function useful, one often needs to use an overarching context
to ensure the resulting functor is sized appropriately. 

transpose

defn

(Fn [(Ref (a (Size b) (c (Size d) e)) StaticLifetime)] (c (Size d) (a (Size b) e)))

                    (transpose f)
                

Transpose takes a sized functor whose inhabitants are sized functors and
effectively swaps their sizes; it is equivalent to matrix transposition.

For example, given a Vector of Size 3 of Vectors of Size 2

`(Vector [(Vector [1 2]) (Vector [3 4]) (Vector [5 6])])`

transpose will return a Vector of size 2 of Vectors of size 3:

`(Vector [(Vector [1 3 5]) (Vector [2 4 6])])`