       defkv kv
 
   This is because the macro is expecting its arguments to be a
-  key-value at **compilation** time. Since in the example above
+  keyword list at **compilation** time. Since in the example above
   we are passing the representation of the variable `kv`, our
   code fails.
 
   This is actually a common pitfall when developing macros. In
   practice, we want to avoid doing work at compilation time as
-  much as we can. That said, let's attempt to improve our macro:
+  much as possible. That said, let's attempt to improve our macro:
 
       defmacro defkv(kv) do
         quote do

        def unquote(k)(), do: unquote(v)
      end

  In the example above, we have generated the function `foo/0` and
  `bar/0` dynamically. Now, imagine that, we want to convert this
  functionality into a macro:

      defmacro defkv(kv) do
        Enum.each kv, fn { k, v } ->
          quote do
            def unquote(k)(), do: unquote(v)
          end

  because Elixir macros are hygienic, a topic we will discuss at length
  in the next sections as well.

  ## Hygiene in variables

  Consider the following example:

