{      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ portable experimentalamy@nualeargais.ie Safe-Inferred@A regular arrangement of tiles where the boundaries are joined.  Minimal complete definition:  normalise.  g a returns the normal indices for a. 9 TODO: need a clearer description and an illustration.  g a returns all of the indices in a's 1 translation group. In other words, it returns a plus the # indices obtained by translating a in each direction by the , extent of the grid along that direction. 9 TODO: need a clearer description and an illustration. -A regular arrangement of tiles with an edge.  Minimal complete definition:  tileSideCount. 'Returns the number of sides a tile has BReturns a the indices of all the tiles at the boundary of a grid.   g a' returns True if the tile with index a is  on a boundary of g, False# otherwise. (Corner tiles are also  boundary tiles.) BReturns the index of the tile(s) that require the maximum number E of moves to reach the nearest boundary tile. A grid may have more A than one central tile (e.g., a rectangular grid with an even = number of rows and columns will have four central tiles).   g a' returns True if the tile with index a is  a centre tile of g, False otherwise. DA regular arrangement of tiles where the number of tiles is finite.  Minimal complete definition: size. %Returns the dimensions of the grid.  For example, if g is a 4x3 rectangular grid,  g would  return (4, 3), while  g would return 12.  A regular arrangement of tiles.  Minimal complete definition: Index,  Direction, indices,  distance,  directionTo. ,Returns the indices of all tiles in a grid.  g a b. returns the minimum number of moves required ! to get from the tile at index a to the tile at index b in  grid g9, moving between adjacent tiles at each step. (Two tiles + are adjacent if they share an edge.) If a or b are not  contained within g, the result is undefined.  g bs a& returns the minimum number of moves 4 required to get from any of the tiles at indices bs to the tile  at index a in grid g(, moving between adjacent tiles at each < step. (Two tiles are adjacent if they share an edge.) If a or  any of bs are not contained within g, the result is  undefined.  g a. returns the indices of the tiles in the grid  g+ which are adjacent to the tile with index a.  g d a- returns the indices of the tile in the grid  g* which is adjacent to the tile with index a , in the  direction d.  g a) returns the number of tiles in the grid  g+ which are adjacent to the tile with index a. g  `'contains'` a returns True if the index a is contained  within the grid g, otherwise it returns false. 4Returns the number of tiles in a grid. Compare with . Returns True+ if the number of tiles in a grid is zero, False  otherwise. Returns False+ if the number of tiles in a grid is zero, True  otherwise. BA list of all edges in a grid, where the edges are represented by ( a pair of indices of adjacent tiles.  g a/ returns a list of pairs associating the index  of each tile in g* with its distance to the tile with index a.  If a is not contained within g, the result is undefined.  g a b returns True if the tile at index a is ! adjacent to the tile at index b in g. (Two tiles are adjacent  if they share an edge.) If a or b are not contained within  g, the result is undefined.   g a b" returns the indices of all tiles - which are neighbours of the tile at index a, and which are  closer to the tile at b than a is. In other words, it returns 2 the possible next steps on a minimal path from a to b. If a  or b are not contained within g, or if there is no path from  a to b7 (e.g., a disconnected grid), the result is undefined. !! g a b+ returns a list of all minimal paths from  the tile at index a to the tile at index b in grid g. A B path is a sequence of tiles where each tile in the sequence is A adjacent to the previous one. (Two tiles are adjacent if they  share an edge.) If a or b are not contained within g, the  result is undefined. 7Tip: The default implementation of this function calls   ). If you want to use a custom algorithm,  consider modifying   instead of  !. "" g a b' returns the direction(s) of the next  tile(s) in a minimal path from the tile at index a to the  tile at index b in grid g. 3  !"#$%&'()*+,-./01234563  !"#$%&'()*+,-./01234563 !"#$%&'()*+,-./  0123456  !"#$%&'()*+,-./0123456portable experimentalamy@nualeargais.ie Safe-Inferred 7@A cylindrical grid with triangular tiles, where the cylinder is  along the y-axis. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. 9'A toroidal grid with triangular tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. ;*A rectangular grid with triangular tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. =3A Parallelogrammatical grid with triangular tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. ?)A triangular grid with triangular tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. A)An unbounded grid with triangular tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. JDFor triangular tiles, it is convenient to define a third component  z. LL s* returns a triangular grid with sides of  length s, using triangular tiles. If s is nonnegative, the  resulting grid will have s^2& tiles. Otherwise, the resulting grid 6 will be null and the list of indices will be null. MM r c# returns a grid in the shape of a  parallelogram with r rows and c columns, using triangular  tiles. If r and c/ are both nonnegative, the resulting grid will  have 2*r*c7 tiles. Otherwise, the resulting grid will be null and % the list of indices will be null. NN r c# returns a grid in the shape of a * rectangle (with jagged edges) that has r rows and c columns,  using triangular tiles. If r and c are both nonnegative, the  resulting grid will have 2*r*c7 tiles. Otherwise, the resulting grid will be null and % the list of indices will be null. OO r c returns a toroidal grid with r rows and c G columns, using triangular tiles. The indexing method is the same as  for  ParaTriGrid. If r and c are both nonnegative, the  resulting grid will have 2*r*c! tiles. Otherwise, the resulting ; grid will be null and the list of indices will be null. PP r c! returns a cylindrical grid with r rows and  c? columns, using triangular tiles, where the cylinder is along 6 the y-axis. The indexing method is the same as for  ParaTriGrid.  If r and c5 are both nonnegative, the resulting grid will have  2*r*c< tiles. Otherwise, the resulting grid will be null and the ! list of indices will be null. /789:;<=>?@ABCDEFGHIJKLMNOP789:;<=>?@ABCDEFGHIJKLMNOPCIHGFEDABJ?@KL=>M;<N9:O78P#789:;<=>?@ABCIHGFEDJKLMNOPportable experimentalamy@nualeargais.ie Safe-Inferred 9;=?ALMNO A?L=M;N9Oportable experimentalamy@nualeargais.ie Safe-InferredQ#A toroidal grid with square tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. S&A rectangular grid with square tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. U%An unbounded grid with square tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. \\ r c" produces a rectangular grid with r rows  and c! columns, using square tiles. If r and c are both - nonnegative, the resulting grid will have r*c tiles. Otherwise, D the resulting grid will be null and the list of indices will be  null. ]] r c returns a toroidal grid with r  rows and c! columns, using square tiles. If r and c are 2 both nonnegative, the resulting grid will have r*c tiles. Otherwise, I the resulting grid will be null and the list of indices will be null. QRSTUVWXYZ[\] QRSTUVWXYZ[\] W[ZYXUVST\QR]QRSTUVW[ZYX\] portable experimentalamy@nualeargais.ie Safe-InferredQSU\]US\Q]portable experimentalamy@nualeargais.ie Safe-Inferred^0A parallelogramatical grid with hexagonal tiles G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. `&A hexagonal grid with hexagonal tiles G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. b'An unbounded grid with hexagonal tiles G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. kk s) returns a grid of hexagonal shape, with  sides of length s, using hexagonal tiles. If s is nonnegative, the  resulting grid will have  3*s*(s-1) + 1" tiles. Otherwise, the resulting ; grid will be null and the list of indices will be null. ll r c# returns a grid in the shape of a  parallelogram with r rows and c% columns, using hexagonal tiles. If  r and c4 are both nonnegative, the resulting grid will have r*c tiles. L Otherwise, the resulting grid will be null and the list of indices will  be null. ^_`abcdefghijkl^_`abcdefghijkldjihgfebc`ak^_l^_`abcdjihgfekl portable experimentalamy@nualeargais.ie Safe-Inferred^`bklb`k^lportable experimentalamy@nualeargais.ie Safe-Inferredm&A toroidal grid with octagonal tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. o)A rectangular grid with octagonal tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. q(An unbounded grid with octagonal tiles. G The grid and its indexing scheme are illustrated in the user guide,  available at  %https://github.com/mhwombat/grid/wiki. || r c" produces a rectangular grid with r rows  and c$ columns, using octagonal tiles. If r and c are both - nonnegative, the resulting grid will have r*c tiles. Otherwise, D the resulting grid will be null and the list of indices will be  null. }} r c returns a toroidal grid with r  rows and c$ columns, using octagonal tiles. If r and c are 2 both nonnegative, the resulting grid will have r*c tiles. Otherwise, I the resulting grid will be null and the list of indices will be null. mnopqrstuvwxyz{|}mnopqrstuvwxyz{|}s{zyxwvutqrop|mn}mnopqrs{zyxwvut|} portable experimentalamy@nualeargais.ie Safe-Inferredmoq|}qo|m} portable experimentalamy@nualeargais.ie Safe-Inferred  !" !"  portable experimentalamy@nualeargais.ie Safe-Inferred ~?A regular arrangement of tiles, having a value associated with  each tile.  Minimal complete definition: toMap, toGrid,  adjustWithKey,   mapWithKey. "Note: Some of the methods have an Ord constraint on the grid E index. This is purely to make it easier to write implementations. . While tile positions can be ordered (e.g., (1,2) < (2,1)), the F ordering may not be particularly meaningful. (Comparisons such as  east of or south of' may be more sensible.) However, it is ; convenient to write implementations of this class using  Data.Map7, with the grid indices as keys. Many of the functions  in Data.Map impose the Ord constraint on map keys, so we'll E live with it. In summary, to use some methods in this class, your # grid indices must be orderable. /Find the value at a tile position in the grid. )Returns a map of grid indices to values. -Returns the grid on which this map is based.  Convert the map to a list of key/ value pairs. 5Lookup the value at a tile position in the grid map. AAdjust a value at a specific tile position. When the tile is not ? within the bounds of the grid map, the original grid map is  returned. AAdjust a value at a specific tile position. When the tile is not ? within the bounds of the grid map, the original grid map is  returned. The expression ( def k map) returns the value  at tile position k or returns def when the tile is not within  the bounds of the grid map. Returns all values in the map +Map a function over all values in the map. +Map a function over all values in the map. ~~~~ portable experimentalamy@nualeargais.ie Safe-Inferred0A map from tile positions in a grid to values. GConstruct a grid map which is strict in the keys (tile positions), but  lazy in the values.       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGGHHIIJJKKLMNOPQRSTUVWXYZZ[[\\]^R_O`abbccddeMN_PQ^fghhiijjkMRN_POQ^lmnopqrstuvwxyz{|}~{grid-5.1Math.Geometry.GridMapMath.Geometry.GridInternal%Math.Geometry.Grid.TriangularInternal!Math.Geometry.Grid.SquareInternal$Math.Geometry.Grid.HexagonalInternal$Math.Geometry.Grid.OctagonalInternalMath.Geometry.GridMap.LazyMath.Geometry.Grid.TriangularMath.Geometry.Grid.SquareMath.Geometry.Grid.HexagonalMath.Geometry.Grid.OctagonalMath.Geometry.Gridcontainers-0.5.0.0 Data.Map.Basefoldl'foldlfoldr'foldr WrappedGrid normalise denormalise BoundedGrid tileSideCountboundary isBoundarycentreisCentre FiniteGridSizesizeGridIndex Directionindicesdistance minDistance neighbours neighbour numNeighbourscontains tileCountnullnonNulledges viewpoint isAdjacentadjacentTilesToward minimalPaths directionTodefaultMinDistancedefaultNeighboursdefaultNeighbourdefaultTileCount defaultEdgesdefaultIsAdjacentdefaultAdjacentTilesTowarddefaultMinimalPathssameEdge adjacentEdgescartesianIndicescartesianCentrecartesianMidpointsneighboursBasedOndistanceBasedOndirectionToBasedOnneighboursWrappedBasedOnneighbourWrappedBasedOndistanceWrappedBasedOndirectionToWrappedBasedOn YCylTriGrid TorTriGrid RectTriGrid ParaTriGrid TriTriGridUnboundedTriGrid TriDirection Southwest SoutheastNorth Northeast NorthwestSouthtriZ inTriTriGrid triTriGrid paraTriGrid rectTriGrid torTriGrid yCylTriGrid TorSquareGridRectSquareGridUnboundedSquareGridSquareDirectionWestEastrectSquareGrid torSquareGrid ParaHexGrid HexHexGridUnboundedHexGrid HexDirection hexHexGrid paraHexGrid TorOctGrid RectOctGridUnboundedOctGrid OctDirection rectOctGrid torOctGridGridMapBaseGrid!toMaptoGridtoListlookupadjust adjustWithKeyfindWithDefaultelemsmap mapWithKeyLGridMap lazyGridMap$fWrappedGridYCylTriGrid$fFiniteGridYCylTriGrid$fGridYCylTriGrid$fShowYCylTriGrid$fWrappedGridTorTriGrid$fFiniteGridTorTriGrid$fGridTorTriGrid$fShowTorTriGrid$fBoundedGridRectTriGrid$fFiniteGridRectTriGrid$fGridRectTriGrid$fShowRectTriGrid$fBoundedGridParaTriGrid$fFiniteGridParaTriGrid$fGridParaTriGrid$fShowParaTriGrid$fBoundedGridTriTriGrid$fFiniteGridTriTriGrid$fGridTriTriGrid$fShowTriTriGrid$fGridUnboundedTriGrid$fWrappedGridTorSquareGrid$fFiniteGridTorSquareGrid$fGridTorSquareGrid$fShowTorSquareGrid$fBoundedGridRectSquareGrid$fFiniteGridRectSquareGrid$fGridRectSquareGrid$fShowRectSquareGrid$fGridUnboundedSquareGrid$fBoundedGridParaHexGrid$fFiniteGridParaHexGrid$fGridParaHexGrid$fShowParaHexGrid$fBoundedGridHexHexGrid$fFiniteGridHexHexGrid$fGridHexHexGrid$fShowHexHexGrid$fGridUnboundedHexGrid$fWrappedGridTorOctGrid$fFiniteGridTorOctGrid$fGridTorOctGrid$fShowTorOctGrid$fBoundedGridRectOctGrid$fFiniteGridRectOctGrid$fGridRectOctGrid$fShowRectOctGrid$fGridUnboundedOctGridlgmGridlgmMap$fShowLGridMap $fEqLGridMap$fGridMapLGridMapv$fFiniteGridLGridMap$fGridLGridMap$fFoldableLGridMap$fFunctorLGridMap