         stride = calculateStride(shape)
         count = shape.reduce(1, combine: *)
         
-        cartesianFn = checkFn(definition, shape: shape)
-        linearFn = checkFn(transformFn(definition, stride: stride), count: count)
+        cartesianFn = definition
+        linearFn = transformFn(definition, stride: stride)
         unified = false
     }
     

        stride = calculateStride(shape)
        count = shape.reduce(1, combine: *)
        
        cartesianFn = checkFn(transformFn(definition, stride: stride), shape: shape)
        linearFn = checkFn(definition, count: count)
        unified = false
    }
    

extension ComputedArray {
    
    public subscript(indices: [ArrayIndex]) -> ArraySlice<Element> {
        return ArraySlice(baseArray: self, viewIndices: indices) // Bounds checking happens in ArraySlice's init.
    }
    
    public subscript(indices: ArrayIndex...) -> ArraySlice<Element> {
        return ArraySlice(baseArray: self, viewIndices: indices) // Bounds checking happens in ArraySlice's init.
    }
    
}

private func transformFn<A>(cartesianFn: [Int] -> A, stride: [Int]) -> Int -> A {
