From 91250bd41c600935207da3a35b7cc5eff6a7c5ee Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Sat, 15 Nov 2025 17:15:37 +0100 Subject: XArray: Optimise toListOuter Thanks Mikolaj! --- src/Data/Array/XArray.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/Data/Array') diff --git a/src/Data/Array/XArray.hs b/src/Data/Array/XArray.hs index 92d9e13..8b4fd60 100644 --- a/src/Data/Array/XArray.hs +++ b/src/Data/Array/XArray.hs @@ -301,10 +301,12 @@ fromListOuter ssh l "does not match the type (" ++ show (fromSNat' m) ++ ")" _ -> XArray (S.ravel (ORB.fromList [length l] (coerce @[XArray sh a] @[S.Array (Rank sh) a] l))) -toListOuter :: Storable a => XArray (n : sh) a -> [XArray sh a] +toListOuter :: forall a n sh. Storable a => XArray (n : sh) a -> [XArray sh a] toListOuter (XArray arr) = case S.shapeL arr of 0 : _ -> [] + -- orthotope doesn't seem to optimise this case, so we need to do it here + [_] | Refl <- (unsafeCoerceRefl :: sh :~: '[]) -> coerce (map S.scalar $ S.toList arr) _ -> coerce (ORB.toList (S.unravel arr)) fromList1 :: Storable a => StaticShX '[n] -> [a] -> XArray '[n] a -- cgit v1.2.3-70-g09d2