grids-0.1.0.0

Safe HaskellNone
LanguageHaskell2010

Data.Grid

Documentation

newtype Grid (dims :: [Nat]) a Source #

Constructors

Grid (Vector a) 
Instances
(Dimensions dims, ind ~ Coord dims) => FunctorWithIndex ind (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

imap :: (ind -> a -> b) -> Grid dims a -> Grid dims b #

imapped :: IndexedSetter ind (Grid dims a) (Grid dims b) a b #

(Dimensions dims, ind ~ Coord dims) => FoldableWithIndex ind (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

ifoldMap :: Monoid m => (ind -> a -> m) -> Grid dims a -> m #

ifolded :: IndexedFold ind (Grid dims a) a #

ifoldr :: (ind -> a -> b -> b) -> b -> Grid dims a -> b #

ifoldl :: (ind -> b -> a -> b) -> b -> Grid dims a -> b #

ifoldr' :: (ind -> a -> b -> b) -> b -> Grid dims a -> b #

ifoldl' :: (ind -> b -> a -> b) -> b -> Grid dims a -> b #

(Dimensions dims, ind ~ Coord dims) => TraversableWithIndex ind (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

itraverse :: Applicative f => (ind -> a -> f b) -> Grid dims a -> f (Grid dims b) #

itraversed :: IndexedTraversal ind (Grid dims a) (Grid dims b) a b #

Functor (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

fmap :: (a -> b) -> Grid dims a -> Grid dims b #

(<$) :: a -> Grid dims b -> Grid dims a #

Dimensions dims => Applicative (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

pure :: a -> Grid dims a #

(<*>) :: Grid dims (a -> b) -> Grid dims a -> Grid dims b #

liftA2 :: (a -> b -> c) -> Grid dims a -> Grid dims b -> Grid dims c #

(*>) :: Grid dims a -> Grid dims b -> Grid dims b #

(<*) :: Grid dims a -> Grid dims b -> Grid dims a #

Foldable (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

fold :: Monoid m => Grid dims m -> m #

foldMap :: Monoid m => (a -> m) -> Grid dims a -> m #

foldr :: (a -> b -> b) -> b -> Grid dims a -> b #

foldr' :: (a -> b -> b) -> b -> Grid dims a -> b #

foldl :: (b -> a -> b) -> b -> Grid dims a -> b #

foldl' :: (b -> a -> b) -> b -> Grid dims a -> b #

foldr1 :: (a -> a -> a) -> Grid dims a -> a #

foldl1 :: (a -> a -> a) -> Grid dims a -> a #

toList :: Grid dims a -> [a] #

null :: Grid dims a -> Bool #

length :: Grid dims a -> Int #

elem :: Eq a => a -> Grid dims a -> Bool #

maximum :: Ord a => Grid dims a -> a #

minimum :: Ord a => Grid dims a -> a #

sum :: Num a => Grid dims a -> a #

product :: Num a => Grid dims a -> a #

Traversable (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

traverse :: Applicative f => (a -> f b) -> Grid dims a -> f (Grid dims b) #

sequenceA :: Applicative f => Grid dims (f a) -> f (Grid dims a) #

mapM :: Monad m => (a -> m b) -> Grid dims a -> m (Grid dims b) #

sequence :: Monad m => Grid dims (m a) -> m (Grid dims a) #

Dimensions dims => Distributive (Grid dims) Source # 
Instance details

Defined in Data.Grid

Methods

distribute :: Functor f => f (Grid dims a) -> Grid dims (f a) #

collect :: Functor f => (a -> Grid dims b) -> f a -> Grid dims (f b) #

distributeM :: Monad m => m (Grid dims a) -> Grid dims (m a) #

collectM :: Monad m => (a -> Grid dims b) -> m a -> Grid dims (m b) #

Dimensions dims => Representable (Grid dims) Source # 
Instance details

Defined in Data.Grid

Associated Types

type Rep (Grid dims) :: Type #

Methods

tabulate :: (Rep (Grid dims) -> a) -> Grid dims a #

index :: Grid dims a -> Rep (Grid dims) -> a #

Eq a => Eq (Grid dims a) Source # 
Instance details

Defined in Data.Grid

Methods

(==) :: Grid dims a -> Grid dims a -> Bool #

(/=) :: Grid dims a -> Grid dims a -> Bool #

(NestLists dims, Show (NestedLists dims a)) => Show (Grid dims a) Source # 
Instance details

Defined in Data.Grid

Methods

showsPrec :: Int -> Grid dims a -> ShowS #

show :: Grid dims a -> String #

showList :: [Grid dims a] -> ShowS #

(Dimensions dims, Semigroup a) => Semigroup (Grid dims a) Source # 
Instance details

Defined in Data.Grid

Methods

(<>) :: Grid dims a -> Grid dims a -> Grid dims a #

sconcat :: NonEmpty (Grid dims a) -> Grid dims a #

stimes :: Integral b => b -> Grid dims a -> Grid dims a #

(Dimensions dims, Monoid a) => Monoid (Grid dims a) Source # 
Instance details

Defined in Data.Grid

Methods

mempty :: Grid dims a #

mappend :: Grid dims a -> Grid dims a -> Grid dims a #

mconcat :: [Grid dims a] -> Grid dims a #

type Rep (Grid dims) Source # 
Instance details

Defined in Data.Grid

type Rep (Grid dims) = Coord dims

type family GridSize dims :: Nat where ... Source #

Equations

GridSize '[] = 0 
GridSize (x ': '[]) = x 
GridSize (x ': xs) = x * GridSize xs 

data x :# y infixr 9 Source #

Constructors

x :# y infixr 9 
Instances
(Eq x, Eq y) => Eq (x :# y) Source # 
Instance details

Defined in Data.Grid

Methods

(==) :: (x :# y) -> (x :# y) -> Bool #

(/=) :: (x :# y) -> (x :# y) -> Bool #

(Ord x, Ord y) => Ord (x :# y) Source # 
Instance details

Defined in Data.Grid

Methods

compare :: (x :# y) -> (x :# y) -> Ordering #

(<) :: (x :# y) -> (x :# y) -> Bool #

(<=) :: (x :# y) -> (x :# y) -> Bool #

(>) :: (x :# y) -> (x :# y) -> Bool #

(>=) :: (x :# y) -> (x :# y) -> Bool #

max :: (x :# y) -> (x :# y) -> x :# y #

min :: (x :# y) -> (x :# y) -> x :# y #

(Show x, Show y) => Show (x :# y) Source # 
Instance details

Defined in Data.Grid

Methods

showsPrec :: Int -> (x :# y) -> ShowS #

show :: (x :# y) -> String #

showList :: [x :# y] -> ShowS #

type family Coord (dims :: [Nat]) where ... Source #

Equations

Coord '[n] = Finite n 
Coord (n ': xs) = Finite n :# Coord xs 

sizeof :: forall (dims :: [Nat]). KnownNat (GridSize dims) => Proxy dims -> Int Source #

type Dims = [Int] Source #

class (NumericConstraints dims, KnownNat (GridSize dims)) => Dimensions (dims :: [Nat]) where Source #

Methods

toCoord :: Proxy dims -> Finite (GridSize dims) -> Coord dims Source #

fromCoord :: Proxy dims -> Coord dims -> Finite (GridSize dims) Source #

Instances
(KnownNat (x * GridSize (y ': xs)), KnownNat x, Dimensions (y ': xs)) => Dimensions (x ': (y ': xs)) Source # 
Instance details

Defined in Data.Grid

Methods

toCoord :: Proxy (x ': (y ': xs)) -> Finite (GridSize (x ': (y ': xs))) -> Coord (x ': (y ': xs)) Source #

fromCoord :: Proxy (x ': (y ': xs)) -> Coord (x ': (y ': xs)) -> Finite (GridSize (x ': (y ': xs))) Source #

KnownNat x => Dimensions (x ': ([] :: [Nat])) Source # 
Instance details

Defined in Data.Grid

Methods

toCoord :: Proxy (x ': []) -> Finite (GridSize (x ': [])) -> Coord (x ': []) Source #

fromCoord :: Proxy (x ': []) -> Coord (x ': []) -> Finite (GridSize (x ': [])) Source #

toFinite :: KnownNat n => Integral m => m -> Finite n Source #

fromFinite :: Num n => Finite m -> n Source #

generate :: forall dims a. Dimensions dims => (Int -> a) -> Grid dims a Source #

type family NestedLists (dims :: [Nat]) a where ... Source #

Equations

NestedLists '[] a = a 
NestedLists (_ ': xs) a = [NestedLists xs a] 

class NestLists (dims :: [Nat]) where Source #

Methods

nestLists :: Proxy dims -> Vector a -> NestedLists dims a Source #

Instances
(KnownNat n, NestLists (n ': ns), Dimensions (m ': (n ': ns)), Dimensions (n ': ns)) => NestLists (m ': (n ': ns)) Source # 
Instance details

Defined in Data.Grid

Methods

nestLists :: Proxy (m ': (n ': ns)) -> Vector a -> NestedLists (m ': (n ': ns)) a Source #

KnownNat n => NestLists (n ': ([] :: [Nat])) Source # 
Instance details

Defined in Data.Grid

Methods

nestLists :: Proxy (n ': []) -> Vector a -> NestedLists (n ': []) a Source #

chunkVector :: forall n a. KnownNat n => Proxy n -> Vector a -> [Vector a] Source #

toNestedLists :: forall dims a. NestLists dims => Grid dims a -> NestedLists dims a Source #

class UnNestLists (dims :: [Nat]) where Source #

Methods

unNestLists :: Proxy dims -> NestedLists dims a -> [a] Source #

Instances
UnNestLists (n ': ns) => UnNestLists (m ': (n ': ns)) Source # 
Instance details

Defined in Data.Grid

Methods

unNestLists :: Proxy (m ': (n ': ns)) -> NestedLists (m ': (n ': ns)) a -> [a] Source #

UnNestLists (n ': ([] :: [Nat])) Source # 
Instance details

Defined in Data.Grid

Methods

unNestLists :: Proxy (n ': []) -> NestedLists (n ': []) a -> [a] Source #

fromNestedLists :: forall dims a. (UnNestLists dims, Dimensions dims) => NestedLists dims a -> Maybe (Grid dims a) Source #

fromList :: forall a dims. Dimensions dims => [a] -> Maybe (Grid dims a) Source #

(//) :: forall dims a. Dimensions dims => Grid dims a -> [(Coord dims, a)] -> Grid dims a Source #