diff --git a/docs/language/api.rst b/docs/language/api.rst
index 238f7d3..c84745c 100644
--- a/docs/language/api.rst
+++ b/docs/language/api.rst
@@ -1017,7 +1017,7 @@ nonlocal
``nonlocal`` can be used to mark a symbol as not local to the current scope.
The parameters are the names of symbols to mark as nonlocal. This is necessary
-to modify variables through nested ``let`` scopes:
+to modify variables through nested ``let`` or ``fn`` scopes:
.. code-block:: clj
@@ -1028,11 +1028,22 @@ to modify variables through nested ``let`` scopes:
(setv x (+ x y))))
x)
-Without the call to ``(nonlocal x)``, this code would result in an
-UnboundLocalError being raised during the call to ``setv``. This is the result
-of the way Python handles scoping for nested functions, which are used by Hy to
-implement ``let``. See `PEP3104 `_
-for further information.
+ (defn some-function []
+ (let [[x 0]]
+ (register-some-callback
+ (fn [stuff]
+ (nonlocal x)
+ (setv x stuff)))))
+
+In the first example, without the call to ``(nonlocal x)``, this code would
+result in an UnboundLocalError being raised during the call to ``setv``.
+
+In the second example, without the call to ``(nonlocal x)``, the inner function
+would redefine ``x`` to ``stuff`` inside its local scope instead of overwriting
+the ``x`` in the outer function
+
+See `PEP3104 `_ for further
+information.
not