module Kafka.Internal.CancellationToken where import Data.IORef data CancellationStatus = Cancelled | Running deriving (Show, Eq) newtype CancellationToken = CancellationToken (IORef CancellationStatus) newCancellationToken :: IO CancellationToken newCancellationToken = CancellationToken <$> newIORef Running status :: CancellationToken -> IO CancellationStatus status (CancellationToken ref) = readIORef ref cancel :: CancellationToken -> IO () cancel (CancellationToken ref) = atomicWriteIORef ref Cancelled