diff options
| -rw-r--r-- | README.md | 8 | ||||
| -rw-r--r-- | src/Data/Array/XArray.hs | 1 |
2 files changed, 8 insertions, 1 deletions
@@ -58,6 +58,14 @@ as precisely as you want to GHC what exactly you're doing. Below the surface layer, there is a more low-level wrapper (`XArray`) around `orthotope` that defines a non-nested `Mixed`-style array type. +**Be aware**: `ox-arrays` attempts to preserve sharing as much as possible. +That is to say: if a function is able avoid copying array data and return an +array that references the original underlying `Vector`, it may do so. For +example, this means that if you convert a nested array to a list of arrays, all +returned arrays reference part of the original array without copying. This +makes `mtoList` fast, but also means that memory may be retained longer than +you might expect. + Here is a little taster of the API, to get a sense for the design: ```haskell diff --git a/src/Data/Array/XArray.hs b/src/Data/Array/XArray.hs index 6ad48cc..29154f1 100644 --- a/src/Data/Array/XArray.hs +++ b/src/Data/Array/XArray.hs @@ -308,7 +308,6 @@ toListOuter (XArray arr@(ORS.A (ORG.A _ t))) = 0 : _ -> [] -- using orthotope's functions here would entail using rerank, which is slow, so we don't [_] | Refl <- (unsafeCoerceRefl :: sh :~: '[]) -> coerce (map S.scalar $ S.toList arr) - -- TODO: this shares the backing array among all the results; is that what we want? n : sh -> coerce $ map (ORG.A sh . OI.indexT t) [0 .. n - 1] fromList1 :: Storable a => StaticShX '[n] -> [a] -> XArray '[n] a |
