frpnow-0.1: Control/FRPNow/Private/Ref.hs
module Control.FRPNow.Private.Ref where
import System.Mem.Weak
import Control.Applicative
import Data.IORef
import Debug.Trace
data Ref a = W (Weak a)
| S a
makeWeakIORef :: IORef a -> IO (Ref (IORef a))
makeWeakIORef v = W <$> mkWeakIORef v (return ())
{-
makeWeakRef :: k -> v -> IO (Ref v)
makeWeakRef k v = W <$> mkWeak k v Nothing
-}
makeStrongRef :: v -> IO (Ref v)
makeStrongRef v = return $ S v
deRef :: Ref a -> IO (Maybe a)
deRef (S a) = return (Just a)
deRef (W a) = deRefWeak a