[Haskell-cafe] Equivalent of withForeignPtr for System.Mem.Weak?

Matthew Steele mdsteele at alum.mit.edu
Sun Oct 31 23:14:16 EDT 2010


I have an object to which I have added one or more finalizers via  
addFinalizer from System.Mem.Weak.  I would like to have a function  
that allows me to make use of the object within a block of IO code,  
and guarantee that the finalizer(s) will not be called during the code  
block -- sort of like withForeignPtr, but for arbitrary objects.  Does  
such a function exist, and if not, how could I write one?

I can imagine writing something like:

\begin{code}
withObject :: a -> IO b -> IO b
withObject obj action = do
   result <- action
   touchObject obj  -- touchObject :: a -> IO ()
   return result
\end{code}

However, I don't know how I should implement touchObject and be  
confident that it won't ever be optimized out.  Any suggestions?

Cheers,
-Matt



More information about the Haskell-Cafe mailing list