## Manipulating Boards

In this assignment, we will start focusing on the boards. A natural
representation for the board is a matrix (which Ocaml represents as an
array of arrays). Each position of the matrix is one of our four
possibilities:
type position = Plain | Water | Wall | Home
type board = position array array

Your task is to write the following functions:

- Write a function
`getDims`

which takes a board and
returns a pair of integers which are the number of rows and the number
of columns in the board.
- Write a function
`isSafe`

which takes a board and a
pair of integers `(i,j)`

. The function should return
`true`

or `false`

depending on whether the
location `(i,j)`

is safe or not. A location is safe if it
is either `Plain`

or `Home`

, and unsafe
otherwise.
- Write a function
`getNeighbors`

which takes a board and
a pair of integers `(i,j)`

. The function should return a
list of all locations which are to the East, West, North, and South,
unless of course the given input location is on an edge or corner.
- Write a function
`getSafeNeighbors`

which takes a board
and a pair of integers `(i,j)`

. The function should return
a list of all neighboring locations which are also safe locations. You
should and in fact *must* reuse the previous two functions to
solve this one.
- Create some boards, and test your code on them. Your samples and
tests much be included with your submission.