Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Array.Nested.Convert
Synopsis
- ixrFromIxS :: forall (sh :: [Nat]) i. IxS sh i -> IxR (Rank sh) i
- ixrFromIxX :: forall (sh :: [Maybe Nat]) i. IxX sh i -> IxR (Rank sh) i
- shrFromShS :: forall (sh :: [Nat]). ShS sh -> IShR (Rank sh)
- shrFromShX :: forall (sh :: [Maybe Nat]). IShX sh -> IShR (Rank sh)
- shrFromShX2 :: forall (n :: Natural). IShX (Replicate n ('Nothing :: Maybe Nat)) -> IShR n
- listrCast :: forall (n' :: Nat) (n :: Nat) i. SNat n' -> ListR n i -> ListR n' i
- ixrCast :: forall (n' :: Nat) (n :: Nat) i. SNat n' -> IxR n i -> IxR n' i
- shrCast :: forall (n' :: Nat) (n :: Nat) i. SNat n' -> ShR n i -> ShR n' i
- ixsFromIxR :: forall (sh :: [Nat]) i. ShS sh -> IxR (Rank sh) i -> IxS sh i
- ixsFromIxR' :: forall (sh :: [Nat]) (n :: Nat) i. ShS sh -> IxR n i -> IxS sh i
- ixsFromIxX :: forall (sh :: [Nat]) i. ShS sh -> IxX (MapJust sh) i -> IxS sh i
- ixsFromIxX' :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) i. ShS sh -> IxX sh' i -> IxS sh i
- withShsFromShR :: forall (n :: Nat) r. IShR n -> (forall (sh :: [Nat]). Rank sh ~ n => ShS sh -> r) -> r
- shsFromShX :: forall (sh :: [Nat]) i. ShX (MapJust sh) i -> ShS sh
- withShsFromShX :: forall (sh' :: [Maybe Nat]) r. IShX sh' -> (forall (sh :: [Nat]). Rank sh ~ Rank sh' => ShS sh -> r) -> r
- shsFromSSX :: forall (sh :: [Nat]). StaticShX (MapJust sh) -> ShS sh
- ixsCast :: forall (sh' :: [Nat]) (sh :: [Nat]) i. ShS sh' -> IxS sh i -> IxS sh' i
- ixxFromIxR :: forall (n :: Nat) i. IxR n i -> IxX (Replicate n ('Nothing :: Maybe Nat)) i
- ixxFromIxS :: forall (sh :: [Nat]) i. IxS sh i -> IxX (MapJust sh) i
- shxFromShR :: forall (n :: Nat) i. ShR n i -> ShX (Replicate n ('Nothing :: Maybe Nat)) i
- shxFromShS :: forall (sh :: [Nat]). ShS sh -> IShX (MapJust sh)
- ixxCast :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]) i. StaticShX sh' -> IxX sh i -> IxX sh' i
- shxCast :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]). StaticShX sh' -> IShX sh -> Maybe (IShX sh')
- shxCast' :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]). StaticShX sh' -> IShX sh -> IShX sh'
- convert :: (Elt a, Elt b) => Conversion a b -> a -> b
- data Conversion a b where
- ConvId :: forall a. Conversion a a
- ConvCmp :: forall b1 b a. Conversion b1 b -> Conversion a b1 -> Conversion a b
- ConvRX :: forall (n :: Nat) a1. Conversion (Ranked n a1) (Mixed (Replicate n ('Nothing :: Maybe Nat)) a1)
- ConvSX :: forall (sh :: [Nat]) a1. Conversion (Shaped sh a1) (Mixed (MapJust sh) a1)
- ConvXR :: forall a1 (sh :: [Maybe Nat]). Elt a1 => Conversion (Mixed sh a1) (Ranked (Rank sh) a1)
- ConvXS :: forall (sh :: [Nat]) a1. Conversion (Mixed (MapJust sh) a1) (Shaped sh a1)
- ConvXS' :: forall (sh :: [Maybe Nat]) (sh' :: [Nat]) a1. (Rank sh ~ Rank sh', Elt a1) => ShS sh' -> Conversion (Mixed sh a1) (Shaped sh' a1)
- ConvXX' :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a1. (Rank sh ~ Rank sh', Elt a1) => StaticShX sh' -> Conversion (Mixed sh a1) (Mixed sh' a1)
- ConvRR :: forall a1 b1 (n :: Nat). Conversion a1 b1 -> Conversion (Ranked n a1) (Ranked n b1)
- ConvSS :: forall a1 b1 (sh :: [Nat]). Conversion a1 b1 -> Conversion (Shaped sh a1) (Shaped sh b1)
- ConvXX :: forall a1 b1 (sh :: [Maybe Nat]). Conversion a1 b1 -> Conversion (Mixed sh a1) (Mixed sh b1)
- ConvT2 :: forall a1 a' b1 b'. Conversion a1 a' -> Conversion b1 b' -> Conversion (a1, b1) (a', b')
- Conv0X :: forall a. Elt a => Conversion a (Mixed ('[] :: [Maybe Nat]) a)
- ConvX0 :: forall b. Conversion (Mixed ('[] :: [Maybe Nat]) b) b
- ConvNest :: forall a1 (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]). Elt a1 => StaticShX sh -> Conversion (Mixed (sh ++ sh') a1) (Mixed sh (Mixed sh' a1))
- ConvUnnest :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a1. Conversion (Mixed sh (Mixed sh' a1)) (Mixed (sh ++ sh') a1)
- ConvZip :: forall a1 b1 (sh :: [Maybe Nat]). (Elt a1, Elt b1) => Conversion (Mixed sh a1, Mixed sh b1) (Mixed sh (a1, b1))
- ConvUnzip :: forall a1 b1 (sh :: [Maybe Nat]). (Elt a1, Elt b1) => Conversion (Mixed sh (a1, b1)) (Mixed sh a1, Mixed sh b1)
- rtoMixed :: forall (n :: Nat) a. Ranked n a -> Mixed (Replicate n ('Nothing :: Maybe Nat)) a
- rcastToMixed :: forall (sh :: [Maybe Nat]) (n :: Natural) a. (Rank sh ~ n, Elt a) => StaticShX sh -> Ranked n a -> Mixed sh a
- rcastToShaped :: forall a (sh :: [Nat]). Elt a => Ranked (Rank sh) a -> ShS sh -> Shaped sh a
- stoMixed :: forall (sh :: [Nat]) a. Shaped sh a -> Mixed (MapJust sh) a
- scastToMixed :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) a. (Elt a, Rank sh ~ Rank sh') => StaticShX sh' -> Shaped sh a -> Mixed sh' a
- stoRanked :: forall a (sh :: [Nat]). Elt a => Shaped sh a -> Ranked (Rank sh) a
- mcast :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a. (Rank sh1 ~ Rank sh2, Elt a) => StaticShX sh2 -> Mixed sh1 a -> Mixed sh2 a
- mcastToShaped :: forall (sh :: [Maybe Nat]) (sh' :: [Nat]) a. (Elt a, Rank sh ~ Rank sh') => ShS sh' -> Mixed sh a -> Shaped sh' a
- mtoRanked :: forall (sh :: [Maybe Nat]) a. Elt a => Mixed sh a -> Ranked (Rank sh) a
Shape/index/list casting functions
To ranked
shrFromShX2 :: forall (n :: Natural). IShX (Replicate n ('Nothing :: Maybe Nat)) -> IShR n Source #
Convenience wrapper around shrFromShX
that applies lemRankReplicate
.
listrCast :: forall (n' :: Nat) (n :: Nat) i. SNat n' -> ListR n i -> ListR n' i Source #
Performs a runtime check that the lengths are identical.
ixrCast :: forall (n' :: Nat) (n :: Nat) i. SNat n' -> IxR n i -> IxR n' i Source #
Performs a runtime check that the lengths are identical.
shrCast :: forall (n' :: Nat) (n :: Nat) i. SNat n' -> ShR n i -> ShR n' i Source #
Performs a runtime check that the lengths are identical.
To shaped
ixsFromIxR' :: forall (sh :: [Nat]) (n :: Nat) i. ShS sh -> IxR n i -> IxS sh i Source #
Performs a runtime check that n
matches Rank sh
. Equivalent to the
following, but more efficient:
ixsFromIxR' sh idx = ixsFromIxR sh (ixrCast (shsRank sh) idx)
ixsFromIxX' :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) i. ShS sh -> IxX sh' i -> IxS sh i Source #
Performs a runtime check that Rank sh'
match Rank sh
. Equivalent to
the following, but more efficient:
ixsFromIxX' sh idx = ixsFromIxX sh (ixxCast (shxFromShS sh) idx)
withShsFromShR :: forall (n :: Nat) r. IShR n -> (forall (sh :: [Nat]). Rank sh ~ n => ShS sh -> r) -> r Source #
withShsFromShX :: forall (sh' :: [Maybe Nat]) r. IShX sh' -> (forall (sh :: [Nat]). Rank sh ~ Rank sh' => ShS sh -> r) -> r Source #
Produce an existential ShS
from an IShX
. If you already know that
sh'
is MapJust
of something, use shsFromShX
instead.
To mixed
ixxCast :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]) i. StaticShX sh' -> IxX sh i -> IxX sh' i Source #
shxCast :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]). StaticShX sh' -> IShX sh -> Maybe (IShX sh') Source #
shxCast' :: forall (sh' :: [Maybe Nat]) (sh :: [Maybe Nat]). StaticShX sh' -> IShX sh -> IShX sh' Source #
Partial version of shxCast
.
Array conversions
data Conversion a b where Source #
The constructors that perform runtime shape checking are marked with a
tick ('
): ConvXS'
and ConvXX'
. For the other constructors, the types
ensure that the shapes are already compatible. To convert between Ranked
and Shaped
, go via Mixed
.
The guiding principle behind Conversion
is that it should represent the
array restructurings, or perhaps re-presentations, that do not change the
underlying XArray
s. This leads to the inclusion of some operations that do
not look like simple conversions (casts) at first glance, like ConvZip
.
Note: Haddock gleefully renames type variables in constructors so that they match the data type head as much as possible. See the source for a more readable presentation of this data type.
Constructors
ConvId :: forall a. Conversion a a | |
ConvCmp :: forall b1 b a. Conversion b1 b -> Conversion a b1 -> Conversion a b | |
ConvRX :: forall (n :: Nat) a1. Conversion (Ranked n a1) (Mixed (Replicate n ('Nothing :: Maybe Nat)) a1) | |
ConvSX :: forall (sh :: [Nat]) a1. Conversion (Shaped sh a1) (Mixed (MapJust sh) a1) | |
ConvXR :: forall a1 (sh :: [Maybe Nat]). Elt a1 => Conversion (Mixed sh a1) (Ranked (Rank sh) a1) | |
ConvXS :: forall (sh :: [Nat]) a1. Conversion (Mixed (MapJust sh) a1) (Shaped sh a1) | |
ConvXS' :: forall (sh :: [Maybe Nat]) (sh' :: [Nat]) a1. (Rank sh ~ Rank sh', Elt a1) => ShS sh' -> Conversion (Mixed sh a1) (Shaped sh' a1) | |
ConvXX' :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a1. (Rank sh ~ Rank sh', Elt a1) => StaticShX sh' -> Conversion (Mixed sh a1) (Mixed sh' a1) | |
ConvRR :: forall a1 b1 (n :: Nat). Conversion a1 b1 -> Conversion (Ranked n a1) (Ranked n b1) | |
ConvSS :: forall a1 b1 (sh :: [Nat]). Conversion a1 b1 -> Conversion (Shaped sh a1) (Shaped sh b1) | |
ConvXX :: forall a1 b1 (sh :: [Maybe Nat]). Conversion a1 b1 -> Conversion (Mixed sh a1) (Mixed sh b1) | |
ConvT2 :: forall a1 a' b1 b'. Conversion a1 a' -> Conversion b1 b' -> Conversion (a1, b1) (a', b') | |
Conv0X :: forall a. Elt a => Conversion a (Mixed ('[] :: [Maybe Nat]) a) | |
ConvX0 :: forall b. Conversion (Mixed ('[] :: [Maybe Nat]) b) b | |
ConvNest :: forall a1 (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]). Elt a1 => StaticShX sh -> Conversion (Mixed (sh ++ sh') a1) (Mixed sh (Mixed sh' a1)) | |
ConvUnnest :: forall (sh :: [Maybe Nat]) (sh' :: [Maybe Nat]) a1. Conversion (Mixed sh (Mixed sh' a1)) (Mixed (sh ++ sh') a1) | |
ConvZip :: forall a1 b1 (sh :: [Maybe Nat]). (Elt a1, Elt b1) => Conversion (Mixed sh a1, Mixed sh b1) (Mixed sh (a1, b1)) | |
ConvUnzip :: forall a1 b1 (sh :: [Maybe Nat]). (Elt a1, Elt b1) => Conversion (Mixed sh (a1, b1)) (Mixed sh a1, Mixed sh b1) |
Instances
Category Conversion Source # | |
Defined in Data.Array.Nested.Convert | |
Show (Conversion a b) Source # | |
Defined in Data.Array.Nested.Convert Methods showsPrec :: Int -> Conversion a b -> ShowS # show :: Conversion a b -> String # showList :: [Conversion a b] -> ShowS # |
Special cases of array conversions
These functions can all be implemented using convert
in some way,
but some have fewer constraints.
rtoMixed :: forall (n :: Nat) a. Ranked n a -> Mixed (Replicate n ('Nothing :: Maybe Nat)) a Source #
rcastToMixed :: forall (sh :: [Maybe Nat]) (n :: Natural) a. (Rank sh ~ n, Elt a) => StaticShX sh -> Ranked n a -> Mixed sh a Source #
A more weakly-typed version of rtoMixed
that does a runtime shape
compatibility check.
rcastToShaped :: forall a (sh :: [Nat]). Elt a => Ranked (Rank sh) a -> ShS sh -> Shaped sh a Source #
scastToMixed :: forall (sh :: [Nat]) (sh' :: [Maybe Nat]) a. (Elt a, Rank sh ~ Rank sh') => StaticShX sh' -> Shaped sh a -> Mixed sh' a Source #
A more weakly-typed version of stoMixed
that does a runtime shape
compatibility check.
mcast :: forall (sh1 :: [Maybe Nat]) (sh2 :: [Maybe Nat]) a. (Rank sh1 ~ Rank sh2, Elt a) => StaticShX sh2 -> Mixed sh1 a -> Mixed sh2 a Source #