| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Data.Array.Comfort.Shape
Synopsis
- class C sh where
- size :: sh -> Int
- uncheckedSize :: sh -> Int
- class C sh => Indexed sh where
- class Indexed sh => InvIndexed sh where
- indexFromOffset :: sh -> Int -> Index sh
- uncheckedIndexFromOffset :: sh -> Int -> Index sh
- newtype ZeroBased n = ZeroBased {
- zeroBasedSize :: n
- newtype OneBased n = OneBased {
- oneBasedSize :: n
- data Range n = Range {}
- data Shifted n = Shifted {
- shiftedOffset, shiftedSize :: n
- data Enumeration n = Enumeration
- newtype Deferred sh = Deferred sh
- data DeferredIndex ix
- deferIndex :: (Indexed sh, Index sh ~ ix) => sh -> ix -> DeferredIndex ix
- revealIndex :: (InvIndexed sh, Index sh ~ ix) => sh -> DeferredIndex ix -> ix
- data sh0 :+: sh1 = sh0 :+: sh1
- data Triangular part size = Triangular {
- triangularPart :: part
- triangularSize :: size
- data Lower = Lower
- data Upper = Upper
- type LowerTriangular = Triangular Lower
- type UpperTriangular = Triangular Upper
- lowerTriangular :: size -> LowerTriangular size
- upperTriangular :: size -> UpperTriangular size
- triangleSize :: Int -> Int
- triangleRoot :: Floating a => a -> a
Documentation
Minimal complete definition
Instances
| C () Source # | |
Defined in Data.Array.Comfort.Shape | |
| C sh => C (Deferred sh) Source # | |
| (Enum n, Bounded n) => C (Enumeration n) Source # | |
Defined in Data.Array.Comfort.Shape | |
| Integral n => C (Shifted n) Source # | |
| Ix n => C (Range n) Source # | |
| Integral n => C (OneBased n) Source # | |
| Integral n => C (ZeroBased n) Source # | |
| (C sh0, C sh1) => C (sh0, sh1) Source # | Row-major composition of two dimensions. |
Defined in Data.Array.Comfort.Shape | |
| (C sh0, C sh1) => C (sh0 :+: sh1) Source # | |
| (TriangularPart part, C size) => C (Triangular part size) Source # | |
Defined in Data.Array.Comfort.Shape Methods size :: Triangular part size -> Int Source # uncheckedSize :: Triangular part size -> Int Source # | |
| (C sh0, C sh1, C sh2) => C (sh0, sh1, sh2) Source # | |
Defined in Data.Array.Comfort.Shape | |
class C sh => Indexed sh where Source #
Minimal complete definition
indices, (sizeOffset | offset), inBounds
Methods
indices :: sh -> [Index sh] Source #
offset :: sh -> Index sh -> Int Source #
uncheckedOffset :: sh -> Index sh -> Int Source #
inBounds :: sh -> Index sh -> Bool Source #
sizeOffset :: sh -> (Int, Index sh -> Int) Source #
uncheckedSizeOffset :: sh -> (Int, Index sh -> Int) Source #
Instances
class Indexed sh => InvIndexed sh where Source #
Minimal complete definition
Methods
indexFromOffset :: sh -> Int -> Index sh Source #
It should hold indexFromOffset sh k == indices sh !! k,
but indexFromOffset should generally be faster.
uncheckedIndexFromOffset :: sh -> Int -> Index sh Source #
Instances
ZeroBased denotes a range starting at zero and has a certain length.
Constructors
| ZeroBased | |
Fields
| |
Instances
OneBased denotes a range starting at one and has a certain length.
Constructors
| OneBased | |
Fields
| |
Instances
Range denotes an inclusive range like
those of the Haskell 98 standard Array type from the array package.
E.g. the shape type (Range Int32, Range Int64)
is equivalent to the ix type (Int32, Int64) for Arrays.
Instances
| Functor Range Source # | |
| Eq n => Eq (Range n) Source # | |
| Show n => Show (Range n) Source # | |
| Storable n => Storable (Range n) Source # | |
| NFData n => NFData (Range n) Source # | |
Defined in Data.Array.Comfort.Shape | |
| Ix n => InvIndexed (Range n) Source # | |
Defined in Data.Array.Comfort.Shape | |
| Ix n => Indexed (Range n) Source # | |
Defined in Data.Array.Comfort.Shape Methods indices :: Range n -> [Index (Range n)] Source # offset :: Range n -> Index (Range n) -> Int Source # uncheckedOffset :: Range n -> Index (Range n) -> Int Source # inBounds :: Range n -> Index (Range n) -> Bool Source # sizeOffset :: Range n -> (Int, Index (Range n) -> Int) Source # uncheckedSizeOffset :: Range n -> (Int, Index (Range n) -> Int) Source # | |
| Ix n => C (Range n) Source # | |
| type Index (Range n) Source # | |
Defined in Data.Array.Comfort.Shape | |
Shifted denotes a range defined by the start index and the length.
Constructors
| Shifted | |
Fields
| |
Instances
| Functor Shifted Source # | |
| Eq n => Eq (Shifted n) Source # | |
| Show n => Show (Shifted n) Source # | |
| Storable n => Storable (Shifted n) Source # | |
Defined in Data.Array.Comfort.Shape | |
| NFData n => NFData (Shifted n) Source # | |
Defined in Data.Array.Comfort.Shape | |
| Integral n => InvIndexed (Shifted n) Source # | |
Defined in Data.Array.Comfort.Shape | |
| Integral n => Indexed (Shifted n) Source # | |
Defined in Data.Array.Comfort.Shape Methods indices :: Shifted n -> [Index (Shifted n)] Source # offset :: Shifted n -> Index (Shifted n) -> Int Source # uncheckedOffset :: Shifted n -> Index (Shifted n) -> Int Source # inBounds :: Shifted n -> Index (Shifted n) -> Bool Source # sizeOffset :: Shifted n -> (Int, Index (Shifted n) -> Int) Source # uncheckedSizeOffset :: Shifted n -> (Int, Index (Shifted n) -> Int) Source # | |
| Integral n => C (Shifted n) Source # | |
| type Index (Shifted n) Source # | |
Defined in Data.Array.Comfort.Shape | |
data Enumeration n Source #
Enumeration denotes a shape of fixed size
that is defined by Enum and Bounded methods.
For correctness it is necessary that the Enum and Bounded
are properly implemented.
Automatically derived instances are fine.
Constructors
| Enumeration |
Instances
This data type wraps another array shape.
Its index type is a wrapped Int.
The advantages are:
No conversion forth and back Int and Index sh.
You can convert once using deferIndex and revealIndex
whenever you need your application specific index type.
No need for e.g. Storable (Index sh), because Int is already Storable.
Constructors
| Deferred sh |
Instances
| Eq sh => Eq (Deferred sh) Source # | |
| Show sh => Show (Deferred sh) Source # | |
| NFData sh => NFData (Deferred sh) Source # | |
Defined in Data.Array.Comfort.Shape | |
| C sh => InvIndexed (Deferred sh) Source # | |
Defined in Data.Array.Comfort.Shape | |
| C sh => Indexed (Deferred sh) Source # | |
Defined in Data.Array.Comfort.Shape Methods indices :: Deferred sh -> [Index (Deferred sh)] Source # offset :: Deferred sh -> Index (Deferred sh) -> Int Source # uncheckedOffset :: Deferred sh -> Index (Deferred sh) -> Int Source # inBounds :: Deferred sh -> Index (Deferred sh) -> Bool Source # sizeOffset :: Deferred sh -> (Int, Index (Deferred sh) -> Int) Source # uncheckedSizeOffset :: Deferred sh -> (Int, Index (Deferred sh) -> Int) Source # | |
| C sh => C (Deferred sh) Source # | |
| type Index (Deferred sh) Source # | |
Defined in Data.Array.Comfort.Shape | |
data DeferredIndex ix Source #
Instances
| Eq (DeferredIndex ix) Source # | |
Defined in Data.Array.Comfort.Shape Methods (==) :: DeferredIndex ix -> DeferredIndex ix -> Bool # (/=) :: DeferredIndex ix -> DeferredIndex ix -> Bool # | |
| Show (DeferredIndex ix) Source # | |
Defined in Data.Array.Comfort.Shape Methods showsPrec :: Int -> DeferredIndex ix -> ShowS # show :: DeferredIndex ix -> String # showList :: [DeferredIndex ix] -> ShowS # | |
| Storable (DeferredIndex ix) Source # | |
Defined in Data.Array.Comfort.Shape Methods sizeOf :: DeferredIndex ix -> Int # alignment :: DeferredIndex ix -> Int # peekElemOff :: Ptr (DeferredIndex ix) -> Int -> IO (DeferredIndex ix) # pokeElemOff :: Ptr (DeferredIndex ix) -> Int -> DeferredIndex ix -> IO () # peekByteOff :: Ptr b -> Int -> IO (DeferredIndex ix) # pokeByteOff :: Ptr b -> Int -> DeferredIndex ix -> IO () # peek :: Ptr (DeferredIndex ix) -> IO (DeferredIndex ix) # poke :: Ptr (DeferredIndex ix) -> DeferredIndex ix -> IO () # | |
deferIndex :: (Indexed sh, Index sh ~ ix) => sh -> ix -> DeferredIndex ix Source #
revealIndex :: (InvIndexed sh, Index sh ~ ix) => sh -> DeferredIndex ix -> ix Source #
data sh0 :+: sh1 infixr 5 Source #
Constructors
| sh0 :+: sh1 infixr 5 |
Instances
| (Eq sh0, Eq sh1) => Eq (sh0 :+: sh1) Source # | |
| (Show sh0, Show sh1) => Show (sh0 :+: sh1) Source # | |
| (NFData sh0, NFData sh1) => NFData (sh0 :+: sh1) Source # | |
Defined in Data.Array.Comfort.Shape | |
| (InvIndexed sh0, InvIndexed sh1) => InvIndexed (sh0 :+: sh1) Source # | |
Defined in Data.Array.Comfort.Shape | |
| (Indexed sh0, Indexed sh1) => Indexed (sh0 :+: sh1) Source # | |
Defined in Data.Array.Comfort.Shape Methods indices :: (sh0 :+: sh1) -> [Index (sh0 :+: sh1)] Source # offset :: (sh0 :+: sh1) -> Index (sh0 :+: sh1) -> Int Source # uncheckedOffset :: (sh0 :+: sh1) -> Index (sh0 :+: sh1) -> Int Source # inBounds :: (sh0 :+: sh1) -> Index (sh0 :+: sh1) -> Bool Source # sizeOffset :: (sh0 :+: sh1) -> (Int, Index (sh0 :+: sh1) -> Int) Source # uncheckedSizeOffset :: (sh0 :+: sh1) -> (Int, Index (sh0 :+: sh1) -> Int) Source # | |
| (C sh0, C sh1) => C (sh0 :+: sh1) Source # | |
| type Index (sh0 :+: sh1) Source # | |
data Triangular part size Source #
Constructors
| Triangular | |
Fields
| |
Instances
Constructors
| Lower |
Constructors
| Upper |
type LowerTriangular = Triangular Lower Source #
type UpperTriangular = Triangular Upper Source #
lowerTriangular :: size -> LowerTriangular size Source #
upperTriangular :: size -> UpperTriangular size Source #
triangleSize :: Int -> Int Source #
triangleRoot :: Floating a => a -> a Source #