-> IO (Weak v) -- weak pointer
mkWeak key val finaliser = IO $ \s ->
- case mkWeak# key val finaliser s of { (# s, w #) ->
- (# s, Weak w #) }
+ case mkWeak# key val finaliser s of { (# s1, w #) ->
+ (# s1, Weak w #) }
deRefWeak :: Weak v -> IO (Maybe v)
deRefWeak (Weak w) = IO $ \s ->
case deRefWeak# w s of
- (# s, flag, w #) -> case flag of
- 0# -> (# s, Nothing #)
- _ -> (# s, Just w #)
+ (# s1, flag, p #) -> case flag of
+ 0# -> (# s1, Nothing #)
+ _ -> (# s1, Just p #)
mkWeakPtr :: k -> IO () -> IO (Weak k)
mkWeakPtr key finaliser = mkWeak key key finaliser