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

Antoine Latter aslatter at gmail.com
Sun Oct 31 23:34:12 EDT 2010


On Sun, Oct 31, 2010 at 10:14 PM, Matthew Steele <mdsteele at alum.mit.edu> wrote:
> 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}
>

CC'ing GHC-users list.

The 'primitive' package has a general purpose 'touch' function:

http://hackage.haskell.org/packages/archive/primitive/0.3.1/doc/html/Control-Monad-Primitive.html#v:touch

But it doesn't state what guarantees are provided by the function.

Antoine


More information about the Haskell-Cafe mailing list