module Hans.Buffer.Signal where

import Control.Concurrent (MVar,newEmptyMVar,tryPutMVar,takeMVar,tryTakeMVar)

type Signal = MVar ()

newSignal :: IO Signal
newSignal  = newEmptyMVar

signal :: Signal -> IO ()
signal var =
  do _ <- tryPutMVar var ()
     return ()

waitSignal :: Signal -> IO ()
waitSignal  = takeMVar

tryWaitSignal :: Signal -> IO Bool
tryWaitSignal var =
  do mb <- tryTakeMVar var
     case mb of
       Just () -> return True
       Nothing -> return False