-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Arbitrary sized type-safe grids with useful combinators @package grids @version 0.2.0.0 module Data.Grid -- | 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]]) --newtype Grid (dims :: [Nat]) a Grid :: (Vector a) -> Grid a -- | Calculate the number of elements in a grid of the given dimensionality -- | Represents valid dimensionalities. All non empty lists of Nats have -- instances class (AllC KnownNat dims, KnownNat (GridSize dims)) => Dimensions (dims :: [Nat]) toCoord :: Dimensions dims => Proxy dims -> Finite (GridSize dims) -> Coord dims fromCoord :: Dimensions dims => Proxy dims -> Coord dims -> Finite (GridSize dims) gridSize :: Dimensions dims => Proxy dims -> Int nestLists :: Dimensions dims => Proxy dims -> Vector a -> NestedLists dims a unNestLists :: Dimensions dims => Proxy dims -> NestedLists dims a -> [a] -- | The coordinate type for a given dimensionality -- --
-- Coord [2, 3] == Finite 2 :# Finite 3 -- Coord [4, 3, 2] == Finite 4 :# Finite 3 :# Finite 2 ---- | Used for constructing arbitrary depth coordinate lists e.g. -- (Finite 2 :# Finite 3) data x (:#) y (:#) :: x -> y -> (:#) x y -- | 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]]] ---- | Build a grid by selecting an element for each element generate :: forall dims a. Dimensions dims => (Int -> a) -> Grid dims a -- | 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]] --toNestedLists :: forall dims a. (Dimensions dims) => Grid dims a -> NestedLists dims a -- | 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 --fromNestedLists :: forall dims a. Dimensions dims => NestedLists dims a -> Maybe (Grid dims a) -- | 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 --fromList :: forall a dims. (KnownNat (GridSize dims), Dimensions dims) => [a] -> Maybe (Grid dims a) -- | Update elements of a grid (//) :: forall dims a. (Dimensions dims) => Grid dims a -> [(Coord dims, a)] -> Grid dims a instance (GHC.Classes.Ord x, GHC.Classes.Ord y) => GHC.Classes.Ord (x Data.Grid.:# y) instance (GHC.Classes.Eq x, GHC.Classes.Eq y) => GHC.Classes.Eq (x Data.Grid.:# y) instance (GHC.Show.Show x, GHC.Show.Show y) => GHC.Show.Show (x Data.Grid.:# y) instance Data.Traversable.Traversable (Data.Grid.Grid dims) instance Data.Foldable.Foldable (Data.Grid.Grid dims) instance GHC.Base.Functor (Data.Grid.Grid dims) instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Grid.Grid dims a) instance (Data.Grid.Dimensions dims, GHC.Show.Show (Data.Grid.NestedLists dims a)) => GHC.Show.Show (Data.Grid.Grid dims a) instance (Data.Grid.Dimensions dims, GHC.Base.Semigroup a) => GHC.Base.Semigroup (Data.Grid.Grid dims a) instance (Data.Grid.Dimensions dims, GHC.Base.Monoid a) => GHC.Base.Monoid (Data.Grid.Grid dims a) instance Data.Grid.Dimensions dims => GHC.Base.Applicative (Data.Grid.Grid dims) instance GHC.TypeNats.KnownNat x => Data.Grid.Dimensions '[x] instance (GHC.TypeNats.KnownNat (Data.Grid.GridSize (x : y : xs)), GHC.TypeNats.KnownNat x, Data.Grid.Dimensions (y : xs)) => Data.Grid.Dimensions (x : y : xs) instance Data.Grid.Dimensions dims => Data.Distributive.Distributive (Data.Grid.Grid dims) instance Data.Grid.Dimensions dims => Data.Functor.Rep.Representable (Data.Grid.Grid dims) module Data.Grid.Lens -- | Focus an element of a grid cell :: forall dims a. (Dimensions dims, Eq (Coord dims)) => Coord dims -> Lens' (Grid dims a) a