2 % (c) The AQUA Project, Glasgow University, 1998
5 \section[PrelWeak]{Module @PrelWeak@}
8 {-# OPTIONS -fno-implicit-prelude #-}
17 data Weak v = Weak (Weak# v)
22 -> IO (Weak v) -- weak pointer
24 mkWeak key val finaliser = IO $ \s ->
25 case mkWeak# key val finaliser s of { (# s1, w #) ->
28 mkWeakPtr :: k -> IO () -> IO (Weak k)
29 mkWeakPtr key finaliser = mkWeak key key finaliser
31 addFinaliser :: key -> IO () -> IO ()
32 addFinaliser key finaliser = do
33 mkWeakPtr key finaliser -- throw it away
36 addForeignFinaliser :: ForeignObj -> IO () -> IO ()
37 addForeignFinaliser (ForeignObj fo) finaliser = addFinaliser fo finaliser
40 instance Eq (Weak v) where
41 (Weak w1) == (Weak w2) = w1 `sameWeak#` w2