úÎüĞñ£      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢portable experimentalamy@nualeargais.ie Safe-Inferred@A regular arrangement of tiles where the boundaries are joined.  Minimal complete definition:  and .  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: . '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.) AReturns 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 @ 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: , . $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. ?Returns the largest possible distance between two tiles in the  grid.  A regular arrangement of tiles.  Minimal complete definition: , , ,  , '. ,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. 8  !"#$%&'()*+,-./0123456789:;8  !"#$%&'()*+,-./0123456789:;8 !"#$%&'()*+,-./ 0123456789:;   !"#$%&'()*+,-./0123456789:;portable experimentalamy@nualeargais.ie Safe-Inferred <@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. >'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. B3A 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. D)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. F)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. ODFor triangular tiles, it is convenient to define a third component  z. QQ 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. RR 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. TT 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. UU 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. VV 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. 0<=>?@ABCDEFGHIJKLMNOPQRSTUV£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·<=>?@ABCDEFGHIJKLMNOPQRSTUVHNMLKJIFGODEPQBCRS@AT>?U<=V$<=>?@ABCDEFGHNMLKJIOPQRSTUV£¤¥¦§¨©ª«¬­®¯°±²³´µ¶· portable experimentalamy@nualeargais.ie Safe-Inferred >@BDFQRTU FDQBR@T>Uportable experimentalamy@nualeargais.ie Safe-InferredW#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. Y&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 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. bb 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. cc 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. WXYZ[\]^_`abc¸¹º»¼½¾¿À WXYZ[\]^_`abc ]a`_^[\YZbWXcWXYZ[\]a`_^bc¸¹º»¼½¾¿À portable experimentalamy@nualeargais.ie Safe-InferredWY[bc[YbWcportable experimentalamy@nualeargais.ie Safe-Inferredd0A 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. f&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. h'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. qq 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. rr 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. defghijklmnopqrÁÂÃÄÅÆÇÈÉdefghijklmnopqrjponmlkhifgqderdefghijponmlkqrÁÂÃÄÅÆÇÈÉ portable experimentalamy@nualeargais.ie Safe-Inferreddfhqrhfqdrportable experimentalamy@nualeargais.ie Safe-Inferreds(A rectangular 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. u&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. w'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. €€ 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.  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. Otherwise, the resulting grid will be null and the ! list of indices will be null. stuvwxyz{|}~€‚ÊËÌÍÎÏĞÑÒstuvwxyz{|}~€‚y~}|{zwxuv€st‚stuvwxy~}|{z€‚ÊËÌÍÎÏĞÑÒ portable experimentalamy@nualeargais.ie Safe-Inferredsuw€wu€sportable experimentalamy@nualeargais.ie Safe-Inferredƒ&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. ’’ 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. ƒ„…†‡ˆ‰Š‹Œ‘’“ÓÔÕÖרÙÚÛƒ„…†‡ˆ‰Š‹Œ‘’“‰‘Œ‹Š‡ˆ…†’ƒ„“ƒ„…†‡ˆ‰‘Œ‹Š’“ÓÔÕÖרÙÚÛ portable experimentalamy@nualeargais.ie Safe-Inferredƒ…‡’“‡…’ƒ“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-Inferred¡/A 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:;<=>?@ABCDEFGHIJKLMMNNOOPPQQRRSTUVWXYZ[\]^_`abbccddefYgVhijjkkllmTUgWXfnoppkkllmTYUWVXnqrssttuuvTYUgWVXfwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²ª«¬­®³´µ¶·¸¹º»†¼½¾¿ÀÁÂÃÄÅgrid-7.0Math.Geometry.GridMapMath.Geometry.GridInternal%Math.Geometry.Grid.TriangularInternal!Math.Geometry.Grid.SquareInternal$Math.Geometry.Grid.HexagonalInternal%Math.Geometry.Grid.HexagonalInternal2$Math.Geometry.Grid.OctagonalInternalMath.Geometry.GridMap.LazyMath.Geometry.Grid.TriangularMath.Geometry.Grid.SquareMath.Geometry.Grid.HexagonalMath.Geometry.Grid.Hexagonal2Math.Geometry.Grid.OctagonalMath.Geometry.Gridcontainers-0.5.0.0 Data.Map.Basefoldl'foldlfoldr'foldr WrappedGrid normalise denormalise BoundedGrid tileSideCountboundary isBoundarycentreisCentredefaultBoundarydefaultIsBoundary defaultCentredefaultIsCentre FiniteGridSizesizemaxPossibleDistanceGridIndex Directionindicesdistance minDistance neighbours neighbour numNeighbourscontains tileCountnullnonNulledges viewpoint isAdjacentadjacentTilesToward minimalPaths directionTodefaultMinDistancedefaultNeighboursdefaultNeighbourdefaultTileCount defaultEdgesdefaultIsAdjacentdefaultAdjacentTilesTowarddefaultMinimalPathsneighboursBasedOndistanceBasedOndirectionToBasedOnneighboursWrappedBasedOnneighbourWrappedBasedOndistanceWrappedBasedOndirectionToWrappedBasedOnsameEdge adjacentEdgescartesianIndicescartesianCentrecartesianMidpoints YCylTriGrid TorTriGrid RectTriGrid ParaTriGrid TriTriGridUnboundedTriGrid TriDirection Southwest SoutheastNorth Northeast NorthwestSouthtriZ inTriTriGrid triTriGrid paraTriGridparallelogramIndices rectTriGrid torTriGrid yCylTriGrid TorSquareGridRectSquareGridUnboundedSquareGridSquareDirectionWestEastrectSquareGrid torSquareGrid ParaHexGrid HexHexGridUnboundedHexGrid HexDirection hexHexGrid paraHexGrid RectHexGrid rectHexGrid rectHexGridY 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$fBoundedGridRectHexGrid$fFiniteGridRectHexGrid$fGridRectHexGrid$fShowRectHexGrid$fWrappedGridTorOctGrid$fFiniteGridTorOctGrid$fGridTorOctGrid$fShowTorOctGrid$fBoundedGridRectOctGrid$fFiniteGridRectOctGrid$fGridRectOctGrid$fShowRectOctGrid$fGridUnboundedOctGridlgmGridlgmMap$fShowLGridMap $fEqLGridMap$fGridMapLGridMapv$fFiniteGridLGridMap$fGridLGridMap$fFoldableLGridMap$fFunctorLGridMap