dimensions-0.3.1.0: Safe type-level dimensionality for multidimensional data.

Copyright(c) Artem Chirkin
LicenseBSD3
Maintainerchirkin@arch.ethz.ch
Safe HaskellNone
LanguageHaskell2010

Numeric.Dimensions.Idx

Contents

Description

Provides a data type Idx that enumerates through multiple dimensions. Lower indices go first, i.e. assumed enumeration is i = i1 + i2*n1 + i3*n1*n2 + ... + ik*n1*n2*...*n(k-1). This is also to encourage column-first matrix enumeration and array layout.

Synopsis

Data types

data Idx ds where Source #

Type-level dimensional indexing with arbitrary Int values inside

Constructors

Z :: Idx '[]

Zero-rank dimensionality - scalar

(:!) :: !Int -> !(Idx ds) -> Idx (d ': ds) infixr 5

List-like concatenation of indices

Instances

IsList (Idx ds) Source # 

Associated Types

type Item (Idx ds) :: * #

Methods

fromList :: [Item (Idx ds)] -> Idx ds #

fromListN :: Int -> [Item (Idx ds)] -> Idx ds #

toList :: Idx ds -> [Item (Idx ds)] #

Dimensions ds => Bounded (Idx ds) Source # 

Methods

minBound :: Idx ds #

maxBound :: Idx ds #

Dimensions ds => Enum (Idx ds) Source # 

Methods

succ :: Idx ds -> Idx ds #

pred :: Idx ds -> Idx ds #

toEnum :: Int -> Idx ds #

fromEnum :: Idx ds -> Int #

enumFrom :: Idx ds -> [Idx ds] #

enumFromThen :: Idx ds -> Idx ds -> [Idx ds] #

enumFromTo :: Idx ds -> Idx ds -> [Idx ds] #

enumFromThenTo :: Idx ds -> Idx ds -> Idx ds -> [Idx ds] #

Eq (Idx ds) Source # 

Methods

(==) :: Idx ds -> Idx ds -> Bool #

(/=) :: Idx ds -> Idx ds -> Bool #

Num (Idx ((:) Nat n ([] Nat))) Source #

With this instance we can slightly reduce indexing expressions e.g. x ! (1 :! 2 :! 4) == x ! (1 :! 2 :! 4 :! Z)

Methods

(+) :: Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) #

(-) :: Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) #

(*) :: Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) #

negate :: Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) #

abs :: Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) #

signum :: Idx ((Nat ': n) [Nat]) -> Idx ((Nat ': n) [Nat]) #

fromInteger :: Integer -> Idx ((Nat ': n) [Nat]) #

Ord (Idx ds) Source # 

Methods

compare :: Idx ds -> Idx ds -> Ordering #

(<) :: Idx ds -> Idx ds -> Bool #

(<=) :: Idx ds -> Idx ds -> Bool #

(>) :: Idx ds -> Idx ds -> Bool #

(>=) :: Idx ds -> Idx ds -> Bool #

max :: Idx ds -> Idx ds -> Idx ds #

min :: Idx ds -> Idx ds -> Idx ds #

Show (Idx ds) Source # 

Methods

showsPrec :: Int -> Idx ds -> ShowS #

show :: Idx ds -> String #

showList :: [Idx ds] -> ShowS #

type Item (Idx ds) Source # 
type Item (Idx ds) = Int

appendIdx :: forall as b. Idx as -> Int -> Idx (as +: b) Source #

Append index dimension

splitIdx :: forall as bs. FiniteList as => Idx (as ++ bs) -> (Idx as, Idx bs) Source #

Split index into prefix and suffix dimensioned indices