miso-1.8.0.0: src/Miso/Concurrent.hs
{-# LANGUAGE ScopedTypeVariables #-}
-----------------------------------------------------------------------------
-- |
-- Module : Miso.Concurrent
-- Copyright : (C) 2016-2018 David M. Johnson
-- License : BSD3-style (see the file LICENSE)
-- Maintainer : David M. Johnson <djohnson.m@gmail.com>
-- Stability : experimental
-- Portability : non-portable
----------------------------------------------------------------------------
module Miso.Concurrent (
Notify (..)
, newNotify
, newEmptyNotify
) where
import Control.Concurrent
-- | Concurrent API for SkipChan implementation
data Notify = Notify {
wait :: IO ()
, notify :: IO ()
}
-- | Create a new 'Notify'
newNotify :: IO Notify
newNotify = do
mvar <- newMVar ()
pure $ Notify
(takeMVar mvar)
(() <$ do tryPutMVar mvar $! ())
-- | Create a new 'Notify'
newEmptyNotify :: IO Notify
newEmptyNotify = do
mvar <- newEmptyMVar
pure $ Notify
(takeMVar mvar)
(() <$ do tryPutMVar mvar $! ())