{-# OPTIONS -fno-cse #-} {- Author: Robert Dockins. This work is hereby released into the public domain. -} module Main where import Control.Concurrent import ThreadLocal -- in the proposed syntax... -- > threadlocal threadLocal1 Integer (initTL (return 0)) {-# NOINLINE threadLocal1 #-} threadLocal1 :: TLRef Integer threadLocal1 = newThreadLocal 0 -- > threadlocal globalMVar (MVar ()) (initTL newEmptyMVarTL) {-# NOINLINE globalMVar #-} globalMVar :: TLRef (MVar ()) globalMVar = newThreadLocalEmptyMVar -- some boilerplate... main = threadLocal1 `seq` globalMVar `seq` initMainThread >> main' main' = do forkIO' (testWrite 10) writeThreadLocal 1 threadLocal1 readThreadLocal globalMVar >>= takeMVar forkIO' (testWrite 11) readThreadLocal globalMVar >>= takeMVar testWrite x = do readThreadLocal threadLocal1 >>= print writeThreadLocal x threadLocal1 readThreadLocal threadLocal1 >>= print readThreadLocal globalMVar >>= (\x -> putMVar x ())