   lowercase letters, and you may also optionally separate the row and column
   with whitespace.
 
-  Validation also occurs to ensure that the coordinate given is actually
-  a square on the board.
+  Both `row` and `col` must parse into non-negative integers for success.
 
   ## Examples
 
-    > LexibombServer.Board.parse_coord "10B"
+    iex> LexibombServer.Board.parse_coord "10B"
     {:ok, {10, 2}}
-    > LexibombServer.Board.parse_coord "10 b"
+    iex> LexibombServer.Board.parse_coord "10 b"
     {:ok, {10, 2}}
-    > LexibombServer.Board.parse_coord {10, "B"}
+    iex> LexibombServer.Board.parse_coord {10, "B"}
     {:ok, {10, 2}}
-    > LexibombServer.Board.parse_coord {10, 2}
+    iex> LexibombServer.Board.parse_coord {10, 2}
     {:ok, {10, 2}}
-    > LexibombServer.Board.parse_coord {10, ""}
-    {:error, :invalid_coord}
-
-  Returns  `{:ok, {row, col}} on success, or {:error, :invalid_coord} on failure.
-  """
-  @spec parse_coord(pid, coord) :: {:ok, Grid.coord} | {:error, :invalid_coord}
-  def parse_coord(pid, coord) when is_binary(coord) do
+    iex> LexibombServer.Board.parse_coord {-10, 2}
+    {:error, :badarg}
+    iex> LexibombServer.Board.parse_coord {"B", 10}
+    {:error, :badarg}
+
+  Returns  `{:ok, {row, col}} on success, or {:error, :badarg} on failure.
+  """
+  @spec parse_coord(coord) :: {:ok, Grid.coord} | {:error, :badarg}
+  def parse_coord(coord) when is_binary(coord) do
     {row_string, letter} = coord |> String.split_at(-1)
 
     try do

  @doc """
  Places a bomb on each of the board squares at the given coordinates.

  Returns `:ok` on success, or `{:error, :invalid_coord}` on failure.
  """
  @spec place_bombs(pid, [coord]) :: :ok | {:error, :invalid_coord}
  def place_bombs(pid, coords) do
    parsed_coords = coords |> Enum.map(&parse_coord(pid, &1))

    any_errors? =
      Enum.any?(parsed_coords, fn coord ->

      end)

    if any_errors? do
      {:error, :badarg}
    else
      parsed_coords
      |> Keyword.values
