Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- newtype Grid (dims :: [Nat]) a = Grid (Vector a)
- type family GridSize (dims :: [Nat]) :: Nat where ...
- class (AllC KnownNat dims, KnownNat (GridSize dims)) => Dimensions (dims :: [Nat]) where
- type family Coord (dims :: [Nat]) where ...
- data x :# y = x :# y
- type family NestedLists (dims :: [Nat]) a where ...
- generate :: forall dims a. Dimensions dims => (Int -> a) -> Grid dims a
- toNestedLists :: forall dims a. Dimensions dims => Grid dims a -> NestedLists dims a
- fromNestedLists :: forall dims a. Dimensions dims => NestedLists dims a -> Maybe (Grid dims a)
- fromList :: forall a dims. (KnownNat (GridSize dims), Dimensions dims) => [a] -> Maybe (Grid dims a)
- (//) :: forall dims a. Dimensions dims => Grid dims a -> [(Coord dims, a)] -> Grid dims a
Documentation
newtype Grid (dims :: [Nat]) a Source #
An grid of arbitrary dimensions.
e.g. a Grid [2, 3] Int
might look like:
generate id :: Grid [2, 3] Int (Grid [[0,1,2], [3,4,5]])
Instances
Functor (Grid dims) Source # | |
Dimensions dims => Applicative (Grid dims) Source # | |
Foldable (Grid dims) Source # | |
Defined in Data.Grid 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] # 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 # | |
Traversable (Grid dims) Source # | |
Dimensions dims => Distributive (Grid dims) Source # | |
Dimensions dims => Representable (Grid dims) Source # | |
Eq a => Eq (Grid dims a) Source # | |
(Dimensions dims, Show (NestedLists dims a)) => Show (Grid dims a) Source # | |
(Dimensions dims, Semigroup a) => Semigroup (Grid dims a) Source # | |
(Dimensions dims, Monoid a) => Monoid (Grid dims a) Source # | |
type Rep (Grid dims) Source # | |
type family GridSize (dims :: [Nat]) :: Nat where ... Source #
Calculate the number of elements in a grid of the given dimensionality
class (AllC KnownNat dims, KnownNat (GridSize dims)) => Dimensions (dims :: [Nat]) where Source #
Represents valid dimensionalities. All non empty lists of Nats have instances
toCoord :: Proxy dims -> Finite (GridSize dims) -> Coord dims Source #
fromCoord :: Proxy dims -> Coord dims -> Finite (GridSize dims) Source #
gridSize :: Proxy dims -> Int Source #
nestLists :: Proxy dims -> Vector a -> NestedLists dims a Source #
unNestLists :: Proxy dims -> NestedLists dims a -> [a] Source #
Instances
(KnownNat (GridSize (x ': (y ': xs))), KnownNat x, Dimensions (y ': xs)) => Dimensions (x ': (y ': xs)) Source # | |
Defined in Data.Grid 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 # gridSize :: Proxy (x ': (y ': xs)) -> Int Source # nestLists :: Proxy (x ': (y ': xs)) -> Vector a -> NestedLists (x ': (y ': xs)) a Source # unNestLists :: Proxy (x ': (y ': xs)) -> NestedLists (x ': (y ': xs)) a -> [a] Source # | |
KnownNat x => Dimensions (x ': ([] :: [Nat])) Source # | |
Defined in Data.Grid toCoord :: Proxy (x ': []) -> Finite (GridSize (x ': [])) -> Coord (x ': []) Source # fromCoord :: Proxy (x ': []) -> Coord (x ': []) -> Finite (GridSize (x ': [])) Source # gridSize :: Proxy (x ': []) -> Int Source # nestLists :: Proxy (x ': []) -> Vector a -> NestedLists (x ': []) a Source # unNestLists :: Proxy (x ': []) -> NestedLists (x ': []) a -> [a] Source # |
type family Coord (dims :: [Nat]) where ... Source #
The coordinate type for a given dimensionality
Coord [2, 3] == Finite 2 :# Finite 3 Coord [4, 3, 2] == Finite 4 :# Finite 3 :# Finite 2
x :# y infixr 9 |
type family NestedLists (dims :: [Nat]) a where ... Source #
Computes the level of nesting requried to represent a given grid dimensionality as a nested list
NestedLists [2, 3] Int == [[Int]] NestedLists [2, 3, 4] Int == [[[Int]]]
NestedLists '[] a = a | |
NestedLists (_ ': xs) a = [NestedLists xs a] |
generate :: forall dims a. Dimensions dims => (Int -> a) -> Grid dims a Source #
Build a grid by selecting an element for each element
toNestedLists :: forall dims a. Dimensions dims => Grid dims a -> NestedLists dims a Source #
Turn a grid into a nested list structure. List nesting increases for each dimension
toNestedLists (G.generate id :: Grid [2, 3] Int) [[0,1,2],[3,4,5]]
fromNestedLists :: forall dims a. Dimensions dims => NestedLists dims a -> Maybe (Grid dims a) Source #
Turn a nested list structure into a Grid if the list is well formed. Required list nesting increases for each dimension
fromNestedLists [[0,1,2],[3,4,5]] :: Maybe (Grid [2, 3] Int) Just (Grid [[0,1,2],[3,4,5]]) fromNestedLists [[0],[1,2]] :: Maybe (Grid [2, 3] Int) Nothing
fromList :: forall a dims. (KnownNat (GridSize dims), Dimensions dims) => [a] -> Maybe (Grid dims a) Source #
Convert a list into a Grid or fail if not provided the correct number of elements
G.fromList [0, 1, 2, 3, 4, 5] :: Maybe (Grid [2, 3] Int) Just (Grid [[0,1,2],[3,4,5]]) G.fromList [0, 1, 2, 3] :: Maybe (Grid [2, 3] Int) Nothing