module Vaultaire.Util
(
linkThread,
waitForever,
fatal
) where
import Control.Concurrent
import Control.Concurrent.Async
import Control.Monad
import Control.Monad.IO.Class
import System.IO.Unsafe (unsafePerformIO)
import System.Log.Logger
linkThread :: MonadIO m => IO a -> m ()
linkThread = liftIO . (async >=> link)
waitForever :: MonadIO m => m ()
waitForever = liftIO (threadDelay maxBound) >> waitForever
fatal :: String -> String -> a
fatal component err =
unsafePerformIO (criticalM component err) `seq`
error ("fatal error in " ++ component ++ ": " ++ err)