2 % (c) The AQUA Project, Glasgow University, 1998
5 \section[PrelWeak]{Module @PrelWeak@}
8 {-# OPTIONS -fno-implicit-prelude #-}
18 #ifndef __PARALLEL_HASKELL__
20 data Weak v = Weak (Weak# v)
24 -> Maybe (IO ()) -- finalizer
25 -> IO (Weak v) -- weak pointer
27 mkWeak key val (Just finalizer) = IO $ \s ->
28 case mkWeak# key val finalizer s of { (# s1, w #) -> (# s1, Weak w #) }
29 mkWeak key val Nothing = IO $ \s ->
30 case mkWeak# key val (unsafeCoerce# 0#) s of { (# s1, w #) -> (# s1, Weak w #) }
32 mkWeakPtr :: k -> Maybe (IO ()) -> IO (Weak k)
33 mkWeakPtr key finalizer = mkWeak key key finalizer
35 addFinalizer :: key -> IO () -> IO ()
36 addFinalizer key finalizer = do
37 mkWeakPtr key (Just finalizer) -- throw it away
40 addForeignFinalizer :: ForeignObj -> IO () -> IO ()
41 addForeignFinalizer (ForeignObj fo) finalizer = addFinalizer fo finalizer
44 instance Eq (Weak v) where
45 (Weak w1) == (Weak w2) = w1 `sameWeak#` w2