module FRP.Ordrea.Weak (mkWeakWithIORef) where
import GHC.Exts
import GHC.IO
import GHC.IORef
import GHC.STRef
import GHC.Weak
mkWeakWithIORef :: IORef a -> v -> Maybe (IO ()) -> IO (Weak v)
mkWeakWithIORef (IORef (STRef ref)) v (Just fin) = IO $ \s ->
case mkWeak# ref v fin s of
(# s1, w #) -> (# s1, Weak w #)
mkWeakWithIORef (IORef (STRef ref)) v Nothing = IO $ \s ->
case mkWeakNoFinalizer# ref v s of
(# s1, w #) -> (# s1, Weak w #)
# if __GLASGOW_HASKELL__ < 706
mkWeakNoFinalizer#
:: MutVar# RealWorld a
-> v
-> State# RealWorld
-> (# State# RealWorld, Weak# v #)
mkWeakNoFinalizer# key val s = mkWeak# key val (unsafeCoerce# 0#) s
# endif