       # improper list on the right will return an improper list
       iex> [1] ++ [2 | 3]
       [1, 2 | 3]
+
+  The `++/2` operator is right associative, meaning:
+
+      iex> [1, 2, 3] -- [1] ++ [2]
+      [3]
+
+  As it is equivalent to:
+
+      iex> [1, 2, 3] -- ([1] ++ [2])
+      [3]
 
   """
   @spec list ++ term :: maybe_improper_list

  Giving it an empty list raises:

      tl([])
      #=> ** (ArgumentError) argument error

  """
  @doc guard: true

  It raises `BadMapError` if the first element is not a map.

  Allowed in guard tests. Inlined by the compiler.

  ## Examples

      iex> is_map_key(%{a: "foo", b: "bar"}, :a)
      true

      iex> is_map_key(%{a: "foo", b: "bar"}, :c)
      false
  """
  @doc guard: true, since: "1.10.0"
  @spec is_map_key(map, term) :: boolean
