module Data.Grid
  (
  -- * Grids
   Grid(..)
   -- * Creation
  , generate
  , Rep.tabulate
  , fromNestedLists
  , fromNestedLists'
  , fromList
  , fromList'

  -- * Collapsing
  , toNestedLists

  -- * Indexing
  , Coord(..)
  , coord
  , unconsC
  , appendC
  , Rep.index

  -- * Updating
  , (//)

  -- * Lenses
  , cell

  -- * Convolution
  , autoConvolute
  , convolute

  -- ** Window restriction
  , clampWindow
  , wrapWindow
  , safeWindow

  -- * Permutations
  , transpose
  , permute
  , permuteCoord

  -- * Joining
  , joinGrid
  , splitGrid

  -- * Assorted
  , gridSize

  -- * Typeclasses & Type Families
  , Dimensions
  , NestedLists
  , Neighboring
  , ValidPermutation
  , Permuted
  )
where

import           Data.Grid.Internal.Grid
import           Data.Grid.Internal.Nest
import           Data.Grid.Internal.Lens
import           Data.Grid.Internal.Transpose
import           Data.Grid.Internal.Coord
import           Data.Grid.Internal.Convolution
import           Data.Functor.Rep as Rep