aboutsummaryrefslogtreecommitdiff
path: root/src/Data/Array/Nested/Shaped.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2025-12-02 15:03:10 +0100
committerTom Smeding <tom@tomsmeding.com>2025-12-02 15:03:43 +0100
commitb63642a41f3bddc991d92f2f59b9e3ad53c1f15e (patch)
treea63b978be8baab76c7aa7a99b13a93b408bfc913 /src/Data/Array/Nested/Shaped.hs
parentaf0c099079dae7aa52a660b883204035cbed99c3 (diff)
Provide ix*FromLinear for all three shape kinds
This speeds up {r,s}generatePrim
Diffstat (limited to 'src/Data/Array/Nested/Shaped.hs')
-rw-r--r--src/Data/Array/Nested/Shaped.hs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/Data/Array/Nested/Shaped.hs b/src/Data/Array/Nested/Shaped.hs
index 075549d..99ad590 100644
--- a/src/Data/Array/Nested/Shaped.hs
+++ b/src/Data/Array/Nested/Shaped.hs
@@ -72,10 +72,13 @@ sindexPartial sarr@(Shaped arr) idx =
sgenerate :: forall sh a. KnownElt a => ShS sh -> (IIxS sh -> a) -> Shaped sh a
sgenerate sh f = Shaped (mgenerate (shxFromShS sh) (f . ixsFromIxX sh))
+-- | See 'mgeneratePrim'.
{-# INLINE sgeneratePrim #-}
sgeneratePrim :: forall sh a i. (PrimElt a, Num i)
=> ShS sh -> (IxS sh i -> a) -> Shaped sh a
-sgeneratePrim sh f = Shaped (mgeneratePrim (shxFromShS sh) (f . ixsFromIxX sh))
+sgeneratePrim sh f =
+ let g i = f (ixsFromLinear sh i)
+ in sfromVector sh $ VS.generate (shsSize sh) g
-- | See the documentation of 'mlift'.
slift :: forall sh1 sh2 a. Elt a