-mkWeak key val finaliser = IO $ \s ->
- case mkWeak# key val finaliser s of { (# s1, w #) ->
- (# s1, Weak w #) }
-
-mkWeakNoFinaliser key val = IO $ \s ->
- -- zero is a valid finaliser argument to mkWeak#, and means "no finaliser"
- case mkWeak# key val (unsafeCoerce# 0#) s of { (# s1, w #) ->
- (# s1, Weak w #) }
-
-deRefWeak :: Weak v -> IO (Maybe v)
-deRefWeak (Weak w) = IO $ \s ->
- case deRefWeak# w s of
- (# 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
+mkWeak key val (Just finalizer) = IO $ \s ->
+ case mkWeak# key val finalizer s of { (# s1, w #) -> (# s1, Weak w #) }
+mkWeak key val Nothing = IO $ \s ->
+ case mkWeak# key val (unsafeCoerce# 0#) s of { (# s1, w #) -> (# s1, Weak w #) }