taco-0.3.0.0: src/Data/Shape/Dynamic.hs
module Data.Shape.Dynamic where
import Data.Foldable (foldl')
import qualified Data.Dim as Dim
newtype ShD i =
ShD {unShD :: [Either (Dim.Dd i) (Dim.Sd i)] }
deriving (Eq, Show)
mkDenseShD :: Foldable t => t i -> ShD i
mkDenseShD xss = ShD $ foldl' (\d s -> Left (Dim.Dd s) : d) [] xss
rank :: ShD i -> Int
rank = length . unShD
-- dim :: ShD i -> [i]
dim :: (Num b, Integral a) => ShD a -> [b]
dim sh = fromIntegral <$> foldl' (\d s -> Dim.dim s : d) [] (unShD sh)