   function.
 
   If a key is a function, the function will be invoked
-  passing three arguments, the operation (`:get`), the
-  data to be accessed, and a function to be invoked next.
+  passing three arguments:
+
+    * the operation (`:get`)
+    * the data to be accessed
+    * a function to be invoked next
 
   This means `get_in/2` can be extended to provide
   custom lookups. The downside is that functions cannot be

      iex> put_in(users, ["john", :age], 28)
      %{"john" => %{age: 28}, "meg" => %{age: 23}}

  In case any of entries in the middle returns `nil`,
  an error will be raised when trying to access it next.
  """
  @spec put_in(Access.t(), nonempty_list(term), term) :: Access.t()

      iex> update_in(users, ["john", :age], &(&1 + 1))
      %{"john" => %{age: 28}, "meg" => %{age: 23}}

  In case any of the entries in the middle returns `nil`,
  an error will be raised when trying to access it next.
  """
  @spec update_in(Access.t(), nonempty_list(term), (term -> term)) :: Access.t()
