úÎżL·³F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEportable experimentalamy@nualeargais.ie Safe-Inferred0&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. )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. (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. 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. '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. #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. &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. $An unbounde 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. '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. )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. -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 x' returns True if the tile with index x 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 x' returns True if the tile with index x 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, indices and distance. ,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 x. returns the indices of the tiles in the grid  g+ which are adjacent to the tile with index x. ## g x) returns the number of tiles in the grid  g+ which are adjacent to the tile with index x. $g  `'contains'` x returns True if the index x is contained  within the grid g, otherwise it returns false. %% g x/ returns a list of pairs associating the index  of each tile in g* with its distance to the tile with index x.  If x is not contained within g, the result is undefined. &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 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  ,. FDFor triangular tiles, it is convenient to define a third component  z. -- 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. .. 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. // 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. 00 r c returns a toroidal grid with r rows and c ' columns, using triangular tiles. If r is odd, the result is 6 undefined because the grid edges would overlap. If r and c 6 are both nonnegative, the resulting grid will have 2*r*c tiles. F Otherwise, the resulting grid will be null and the list of indices  will be null. 11 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. 22 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. 33 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. 44 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. 55 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. 66 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. xGHIJK L M N O PQRST !"#$%&'()*+,UVWXFY-./Z0[\]1^23456_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š3  !"#$%&'()*+,-./01234563 !"#$%&'()*+,-./ 0 1 2 3456SGHIJK L M N O PQRST !"#$%&'()*+,UVWXFY-./Z0[\]1^23456_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Športable experimentalamy@nualeargais.ie Safe-Inferred1  !"#$%&'()*+,-./01234561 !"#$%&'()*+,-./ 0 1 2 3456portable experimentalamy@nualeargais.ie Safe-Inferred 7?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. 9/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. AReturns all values in the map B+Map a function over all values in the map. C+Map a function over all values in the map. 789:;<=>?@ABC789:;<=>?@ABC789:;<=>?@ABC7 89:;<=>?@ABCportable experimentalamy@nualeargais.ie Safe-InferredD0A map from tile positions in a grid to values. EGConstruct a grid map which is strict in the keys (tile positions), but  lazy in the values. D‹ŒEŽ‘’“”DEDE D‹ŒEŽ‘’“”•      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM   NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒK„…†‡ˆ‰Š‹Œgrid-5.0Math.Geometry.GridMapMath.Geometry.GridInternalMath.Geometry.GridMap.LazyMath.Geometry.Gridcontainers-0.5.0.0 Data.Map.Basefoldl'foldlfoldr'foldr TorOctGrid RectOctGridUnboundedOctGrid ParaHexGrid HexHexGridUnboundedHexGrid TorSquareGridRectSquareGridUnboundedSquareGrid TorTriGrid RectTriGrid ParaTriGrid TriTriGridUnboundedTriGrid WrappedGrid normalise BoundedGrid tileSideCountboundary isBoundarycentreisCentre FiniteGridSizesizeGridIndexindicesdistance minDistance neighbours numNeighbourscontains viewpoint tileCountnullnonNulledges isAdjacentadjacentTilesToward minimalPaths triTriGrid paraTriGrid rectTriGrid torTriGridrectSquareGrid torSquareGrid hexHexGrid paraHexGrid rectOctGrid torOctGridGridMapBaseGrid!toMaptoGridtoListlookupadjust adjustWithKeyfindWithDefaultelemsmap mapWithKeyLGridMap lazyGridMaptriZsameEdge adjacentEdgesneighboursBasedOndistanceBasedOn inTriTriGrid xMinTorTricartesianIndicescartesianCentre midpointsdenormaliseTor$fWrappedGridTorOctGrid$fFiniteGridTorOctGrid$fGridTorOctGrid$fShowTorOctGrid$fBoundedGridRectOctGrid$fFiniteGridRectOctGrid$fGridRectOctGrid$fShowRectOctGrid$fGridUnboundedOctGrid$fBoundedGridParaHexGrid$fFiniteGridParaHexGrid$fGridParaHexGrid$fShowParaHexGrid$fBoundedGridHexHexGrid$fFiniteGridHexHexGrid$fGridHexHexGrid$fShowHexHexGrid$fGridUnboundedHexGrid$fWrappedGridTorSquareGrid$fFiniteGridTorSquareGrid$fGridTorSquareGrid$fShowTorSquareGrid$fBoundedGridRectSquareGrid$fFiniteGridRectSquareGrid$fGridRectSquareGrid$fShowRectSquareGrid$fGridUnboundedSquareGrid$fWrappedGridTorTriGrid$fFiniteGridTorTriGrid$fGridTorTriGrid$fShowTorTriGrid$fBoundedGridRectTriGrid$fFiniteGridRectTriGrid$fGridRectTriGrid$fShowRectTriGrid$fBoundedGridParaTriGrid$fFiniteGridParaTriGrid$fGridParaTriGrid$fShowParaTriGrid$fBoundedGridTriTriGrid$fFiniteGridTriTriGrid$fGridTriTriGrid$fShowTriTriGrid$fGridUnboundedTriGridlgmGridlgmMap$fShowLGridMap $fEqLGridMap$fGridMapLGridMapv$fFiniteGridLGridMap$fGridLGridMap$fFoldableLGridMap$fFunctorLGridMap