{-# LANGUAGE DataKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeOperators #-} module Data.Array.Nested.Convert where import Data.Type.Equality import Data.Array.Mixed.Lemmas import Data.Array.Mixed.Shape import Data.Array.Nested.Lemmas import Data.Array.Nested.Mixed import Data.Array.Nested.Ranked import Data.Array.Nested.Shape import Data.Array.Nested.Shaped stoRanked :: Elt a => Shaped sh a -> Ranked (Rank sh) a stoRanked sarr@(Shaped arr) | Refl <- lemRankMapJust (sshape sarr) = mtoRanked arr rcastToShaped :: Elt a => Ranked (Rank sh) a -> ShS sh -> Shaped sh a rcastToShaped (Ranked arr) targetsh | Refl <- lemRankReplicate (shxRank (shCvtSX targetsh)) , Refl <- lemRankMapJust targetsh = mcastToShaped arr targetsh