lio-0.11.6.0: examples/channel.hs
module Main where
import LIO
import LIO.DCLabel
import LIO.Concurrent
import LIO.Concurrent.LChan
import Control.Monad
import LIO.TCB (ioTCB)
main :: IO ()
main = evalDC $ do
logger <- newLChan ("Logger" %% True)
forkLIO $ forever $ do
msg <- readLChan logger
lcur <- getLabel
ioTCB $ putStrLn $ show lcur ++ " > " ++ msg
forkLIO $ do
writeLChan logger "in them alternate threads"
forkLIO $ do
taint ("Alice" %% True)
writeLChan logger "i has failed"
forM_ oneToTen $ \i -> writeLChan logger $ "yo "++ show i
where oneToTen :: [Int]
oneToTen = [1..10]