module Issue28 (main) where -- import Control.Monad import Data.IORef import Data.Atomics -- import Data.Atomics.Internal (ptrEq) main :: IO () main = do putStrLn "Issue28: Conducting the simplest possible read-then-CAS test." r <- newIORef "hi" t0 <- readForCAS r (True,t1) <- casIORef r t0 "bye" -- putStrLn$ "First CAS succeeded? "++show b1 -- putStrLn$ "Tickets pointer equal? " ++ show (t0 == t1) -- (b2,t2) <- casIORef r t1 "bye2" -- putStrLn$ "Second CAS succeeded? " ++ show b2 -- unless (b1 == True) $ error "Test failed" putStrLn$ "Issue28: test passed "++show t1