atomic-counter-0.1: Mutable counters that can be modified with atomic operatinos
Copyright(c) Sergey Vinokurov 2022
LicenseApache-2.0 (see LICENSE)
Maintainerserg.foo@gmail.com
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Concurrent.Counter.Lifted.IO

Description

Lifted Counter specialized to operate in the IO monad.

Synopsis

Documentation

data Counter Source #

Memory location that supports select few atomic operations.

Isomorphic to IORef Int.

Instances

Instances details
Eq Counter Source #

Pointer equality

Instance details

Defined in Control.Concurrent.Counter.Lifted.IO

Methods

(==) :: Counter -> Counter -> Bool #

(/=) :: Counter -> Counter -> Bool #

Create

new :: Int -> IO Counter Source #

Create new counter with initial value.

Read/write

get :: Counter -> IO Int Source #

Atomically read the counter's value.

set :: Counter -> Int -> IO () Source #

Atomically assign new value to the counter.

Arithmetic operations

add :: Counter -> Int -> IO Int Source #

Atomically add an amount to the counter and return its old value.

sub :: Counter -> Int -> IO Int Source #

Atomically subtract an amount from the counter and return its old value.

Bitwise operations

and :: Counter -> Int -> IO Int Source #

Atomically combine old value with a new one via bitwise and. Returns old counter value.

or :: Counter -> Int -> IO Int Source #

Atomically combine old value with a new one via bitwise or. Returns old counter value.

xor :: Counter -> Int -> IO Int Source #

Atomically combine old value with a new one via bitwise xor. Returns old counter value.

nand :: Counter -> Int -> IO Int Source #

Atomically combine old value with a new one via bitwise nand. Returns old counter value.