module Halive.Utils where
import Foreign.Store
import Data.Word
import Control.Monad.State
import System.Environment
isHaliveActive :: MonadIO m => m Bool
isHaliveActive = liftIO $ do
r <- lookupEnv "Halive Active"
case r of
Just "Yes" -> return True
_ -> return False
reacquire :: forall a m. (MonadIO m) => Word32 -> m a -> m a
reacquire storeID create = do
maybeStore <- liftIO (lookupStore storeID) :: m (Maybe (Store a))
case maybeStore of
Just store -> liftIO (readStore store)
Nothing -> do
value <- create
persist storeID value
return value
persist :: MonadIO m => Word32 -> a -> m ()
persist storeID value = liftIO (writeStore (Store storeID) value)
persistState :: (MonadState s m, MonadIO m) => Word32 -> m ()
persistState storeID = persist storeID =<< get