diff options
author | Benjamin Barenblat <bbaren@mit.edu> | 2015-05-27 22:23:43 -0400 |
---|---|---|
committer | Benjamin Barenblat <bbaren@mit.edu> | 2015-05-27 22:23:43 -0400 |
commit | 97d6224a6601f538986b734fdc60e2872dc56603 (patch) | |
tree | b7cbd61867fc24699b80e6db7e5a3353a21c4b2d /src/Flag.hs | |
parent | 3b18966e69777c1c1f647899435df9fa1103918d (diff) |
Abstract 'MSampleVar ()' as 'Flag'
Diffstat (limited to 'src/Flag.hs')
-rw-r--r-- | src/Flag.hs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/Flag.hs b/src/Flag.hs new file mode 100644 index 0000000..0896187 --- /dev/null +++ b/src/Flag.hs @@ -0,0 +1,36 @@ +-- Copyright © 2015 Benjamin Barenblat +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); you may not +-- use this file except in compliance with the License. You may obtain a copy +-- of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +-- License for the specific language governing permissions and limitations under +-- the License. + +module Flag ( Flag + , new + , wave + , wait + ) where + +import Control.Concurrent.MSampleVar + +-- | A flag that a thread can wave at another thread. +newtype Flag = Flag (MSampleVar ()) + +-- | Creates a new flag. +new :: IO Flag +new = fmap Flag newEmptySV + +-- | Waves the flag, allowing a thread waiting on the flag to wake up. +wave :: Flag -> IO () +wave (Flag v) = writeSV v () + +-- | Waits until the flag is waved. +wait :: Flag -> IO () +wait (Flag v) = readSV v |