   @digits '0123456789'
   @minus_digits '-0123456789'
   @whitespaces '\s\r\t\n'
-  @escapes %{
+  @escape_map %{
     ?\\ => '\\',
     ?" => '\"',
     ?n => '\n',

  defp string(<<?\\, char>> <> data, pos, chars) when char in @escape_chars do
    cond do
      char == ?u -> unicode(data, pos + 1, chars)
      true -> string(data, pos + 2, [Map.get(@escapes, char)|chars])
    end
  end
  defp string(<<?\\>> <> _data, pos, _chars),

    ?b => '\b',
    ?f => '\f',
    ?t => '\t',
    ?/ => '\/' }
  @escape_chars [?u|Map.keys(@escape_map)]

  @spec parse(iodata) :: {:ok, json} | {:error, String.t}
  def parse(data) do
