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