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)