packages feed

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]