-{-|
- 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-unformity is accidental).
+The return value of 'deRefWeak' depends on when the garbage collector
+runs, hence it is in the 'IO' monad.