-Dereferences a weak pointer. If the key is still alive, then
-@'Just' v@ is returned (where @v@ is the /value/ in the weak pointer), otherwise
-'Nothing' is returned.
-
-The return value of 'deRefWeak' depends on when the garbage collector
-runs, hence it is in the 'IO' monad.
+ A specialised version of 'mkWeakPtr', where the 'Weak' object
+ returned is simply thrown away (however the finalizer will be
+ remembered by the garbage collector, and will still be run
+ when the key becomes unreachable).
+
+ Note: adding a finalizer to a 'Foreign.ForeignPtr.ForeignPtr' using
+ 'addFinalizer' won't work as well as using the specialised version
+ 'Foreign.ForeignPtr.addForeignPtrFinalizer' because the latter
+ version adds the finalizer to the primitive 'ForeignPtr#' object
+ inside, whereas the generic 'addFinalizer' will add the finalizer to
+ the box. Optimisations tend to remove the box, which may cause the
+ finalizer to run earlier than you intended. The same motivation
+ justifies the existence of
+ 'Control.Concurrent.MVar.addMVarFinalizer' and
+ 'Data.IORef.mkWeakIORef' (the non-uniformity is accidental).