     do: throw{:list, pos}
 
   defp map(<<char>> <> data, pos, list)
-    when char in @whitespace,
+    when char in @whitespaces,
     do: map(data,  pos + 1, list)
-  defp map(<<@right_curly_bracket>> <> data, pos, list) do
+  defp map(<<?}>> <> data, pos, list) do
     result = for [value, key] <- Enum.chunk(list, 2), into: %{}, do: {key, value}
     {result, data, pos + 1}
   end
-  defp map(<<@comma>> <> _data, pos, []),
+  defp map(<<?,>> <> _data, pos, []),
     do: throw {:map, pos + 1}
-  defp map(<<@comma>> <> data, pos, list) do
+  defp map(<<?,>> <> data, pos, list) do
     {result, data, pos} = key(data, pos + 1)
     map(data, pos + 1, [result|list])
   end
-  defp map(<<@colon>> <> _data, pos, []),
+  defp map(<<?:>> <> _data, pos, []),
     do: throw {:map, pos + 1}
-  defp map(<<@colon>> <> data, pos, list) do
+  defp map(<<?:>> <> data, pos, list) do
     {result, data, pos} = json(data, pos + 1)
     map(data, pos + 1, [result|list])
   end

  defp float(data, pos, chars, _last),
    do: {chars |> IO.iodata_to_binary |> String.to_float, data, pos}

  defp string(<<@quotation_mark>> <> data, pos, chars),
    do: {chars |> Enum.reverse |> IO.iodata_to_binary, data, pos}
  defp string(<<?\\, char>> <> data, pos, chars) when char in @escape_chars do
    cond do

  @type json :: map | list | String.t | integer | float | true | false | nil

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