     end
   end
 
+  # Converts a single letter representing a column into an integer that matches
+  # the board's coordinate system. Returns `:error` on failure.
+  @spec letter_to_col(String.t) :: pos_integer | :error
+  defp letter_to_col(string) when byte_size(string) === 1 do
+    normalized = String.downcase(string)
+    [char] = normalized |> to_char_list
+
+    char - ?a + 1
+  end
+
+  defp letter_to_col(_), do: :error
+
   # Reveal all the squares on a `board` for debugging.
+  #
+  # If passed a `pid`, it will store the revealed state of the board in the
+  # given process and return `{:ok, revealed_board}`.
+  #
+  # If passed a `board`, it will return a new board with the revealed state.
   @doc false
   @spec __reveal__(pid | t) :: {:ok, t} | t
   def __reveal__(pid) when is_pid(pid) do

    }
  end

  @spec get(pid) :: t
  def get(pid) do
    Agent.get(pid, &(&1))
  end

  @spec set(t, pid) :: :ok
  def set(board, pid) do
    Agent.update(pid, fn _ -> board end)
  end

  @spec size(pid) :: pos_integer
  def size(pid) do
    Agent.get(pid, fn board ->

    render(board.grid)
  end

  @spec render(nil | Grid.t) :: String.t
  defp render(nil), do: "#Board<[]>"
  defp render(grid) do
    indent = 2
