IOR-0.1: src/Test.hs
module Main where
import Control.Applicative
import Control.Monad
import Data.IORRef
import System.IOR
gpair :: (RElem r0 rs, RElem r1 rs)
=> IORRef r0 a -> IORRef r1 b -> IOR r rs (IORRef r (a, b))
test1 :: IO ()
test2 :: IO ()
test3 :: IO ()
main :: IO ()
gpair v w = liftA2 (,) (readIORRef v) (readIORRef w) >>= newIORRef
test1 = (print =<<) $ runIOR $ do
r1 <- getIORTag
a <- newIORRef 1
c <- newIOR $ do
v <- readIORRef a
b <- newIORRef 2
v' <- readIORRef b
withIORTag r1 (newIORRef $ v + v')
readIORRef c
test2 = (print =<<) $ runIOR $ do
v <- newIORRef 1
newIOR $ do
w <- newIORRef 2
liftA2 (,)
(gpair v w >>= readIORRef)
(gpair w v >>= readIORRef)
test3 = (print =<<) $ runIOR $
newIOR (newIORRef 1 >>= join gpair >>= readIORRef)
main = do
test1
test2
test3