Portability | portable |
---|---|

Stability | experimental |

Maintainer | amy@nualeargais.ie |

Safe Haskell | Safe-Infered |

A regular arrangement of tiles. Grids have a variety of uses, including games and self-organising maps.

- class Eq x => Grid g s x | g -> s, g -> x where
- data TriTriGrid
- triTriGrid :: Int -> TriTriGrid
- data ParaTriGrid
- paraTriGrid :: Int -> Int -> ParaTriGrid
- data RectSquareGrid
- rectSquareGrid :: Int -> Int -> RectSquareGrid
- data TorSquareGrid
- torSquareGrid :: Int -> Int -> TorSquareGrid
- data HexHexGrid
- hexHexGrid :: Int -> HexHexGrid
- data ParaHexGrid
- paraHexGrid :: Int -> Int -> ParaHexGrid

# Generic

class Eq x => Grid g s x | g -> s, g -> x whereSource

A regular arrangement of tiles.
Minimal complete definition: `indices`

, `distance`

, and `size`

.

Returns the indices of all tiles in a grid.

distance :: x -> x -> g -> IntSource

returns the minimum number of moves required to get from
`distance`

a b`a`

to `b`

, 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.

Returns the dimensions of the grid.
For example, if `g`

is a 4x3 rectangular grid,

would return
`size`

g`(4, 3)`

, while

would return `tileCount`

g`12`

.

neighbours :: x -> g -> [x]Source

returns the indices of the tiles in the grid `neighbours`

x g`g`

which are adjacent to the tile at `x`

.

inGrid :: x -> g -> BoolSource

`x `'inGrid'` g`

returns true if the index `x`

is contained within `g`

,
otherwise it returns false.

viewpoint :: x -> g -> [(x, Int)]Source

returns a list of pairs associating the index of each
tile in `viewpoint`

x g`g`

with its distance to the tile with index `x`

. If `x`

is not
contained within `g`

, the result is undefined.

tileCount :: Grid g s x => g -> IntSource

Returns the number of tiles in a grid. Compare with

.
`size`

empty :: Grid g s x => g -> BoolSource

Returns `True`

if the number of tiles in a grid is zero, `False`

otherwise.

nonEmpty :: Grid g s x => g -> BoolSource

Returns `False`

if the number of tiles in a grid is zero, `True`

otherwise.

# Grids with triangular tiles

data TriTriGrid Source

A triangular grid with triangular tiles. The grid and its indexing scheme are illustrated in the user guide, available from

triTriGrid :: Int -> TriTriGridSource

returns a triangular grid with sides of
length `triTriGrid`

s`s`

, using triangular tiles. If `s`

is nonnegative, the resulting
grid will have `s^2`

tiles. Otherwise, the resulting grid will be empty
and the list of indices will be null.

data ParaTriGrid Source

A Parallelogrammatical grid with triangular tiles.

Show ParaTriGrid | |

Grid ParaTriGrid (Int, Int) (Int, Int) |

paraTriGrid :: Int -> Int -> ParaTriGridSource

returns a grid in the shape of a
parallelogram with `paraTriGrid`

r c`r`

rows and `c`

columns, using triangular tiles.
If `r`

and `c`

are both nonnegative, the resulting grid will have `2*r*c`

tiles. Otherwise, the resulting grid will be empty and the list of indices
will be null.

data RectSquareGrid Source

A rectangular grid with square tiles.

Show RectSquareGrid | |

Grid RectSquareGrid (Int, Int) (Int, Int) |

rectSquareGrid :: Int -> Int -> RectSquareGridSource

produces a rectangular grid with `rectSquareGrid`

r c`r`

rows and `c`

columns, using square tiles. If `r`

and `c`

are both nonnegative, the
resulting grid will have `r*c`

tiles. Otherwise, the resulting grid will
be empty and the list of indices will be null.

data TorSquareGrid Source

A toroidal grid with square tiles.

Show TorSquareGrid | |

Grid TorSquareGrid (Int, Int) (Int, Int) |

torSquareGrid :: Int -> Int -> TorSquareGridSource

returns a toroidal grid with `torSquareGrid`

r c`r`

rows and `c`

columns, using square tiles. If `r`

and `c`

are
both nonnegative, the resulting grid will have `r*c`

tiles. Otherwise,
the resulting grid will be empty and the list of indices will be null.

# Grids with hexagonal tiles

data HexHexGrid Source

A hexagonal grid with hexagonal tiles

hexHexGrid :: Int -> HexHexGridSource

returns a grid of hexagonal shape, with
-- sides of length `hexHexGrid`

s`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 empty and the list of indices will be null.

data ParaHexGrid Source

A parallelogramatical grid with hexagonal tiles

Show ParaHexGrid | |

Grid ParaHexGrid (Int, Int) (Int, Int) |

paraHexGrid :: Int -> Int -> ParaHexGridSource

returns a grid in the shape of a
parallelogram with `paraHexGrid`

r c`r`

rows and `c`

columns, using hexagonal tiles. If
`r`

and `c`

are both nonnegative, the resulting grid will have `r*c`

tiles.
Otherwise, the resulting grid will be empty and the list of indices will
be null.