diff --git a/ghc/docs/libraries/Weak.sgml b/ghc/docs/libraries/Weak.sgml
index bc88b042bfd3f6b7a57f32c977fd94e79c545a9e..0f223f42f36ac4d79bcb1d11733318f2b779f6da 100644
--- a/ghc/docs/libraries/Weak.sgml
+++ b/ghc/docs/libraries/Weak.sgml
@@ -215,6 +215,7 @@ follows
 A heap object is reachable if:
 
 <itemize>
+<item> It is a member of the <em/root set/.
 <item> It is directly pointed to by a reachable object, other than
 a weak pointer object.
 <item> It is a weak pointer object whose key is reachable.
@@ -222,6 +223,14 @@ a weak pointer object.
 reachable.
 </itemize>
 
+The root set consists of all runnable threads, and all stable pointers
+(see Section <ref id="sec:stable-pointers" name="Stable Pointers">).
+NOTE: currently all top-level objects are considered to be reachable,
+although we hope to remove this restriction in the future.  A
+<tt/Char/ or small <tt/Int/ will also be constantly reachable, since
+the garbage collector replaces heap-resident <tt/Char/s and small
+<tt/Int/s with pointers to static copies.
+
 Notice that a pointer to the key from its associated 
 value or finaliser does not make the key reachable.
 However, if the key is reachable some other way, then the value