Hello,

     Here is a code snippet:
type Resource = TVar Int

putR :: Resource -> Int -> STM ()
putR r i = do { v <- readTVar r;
                writeTVar r (v + i) }

getR :: Resource -> Int -> STM ()
getR r i = do { v <- readTVar r;
                if (v < i) then retry
                else writeTVar r (v-i)}

createR :: Int -> STM (Resource)
createR i = newTVar i

main = do {atomic (r <- (createR 1); putR r 1)}

Strangely I am not getting a type error rather a syntax on the "<-" in main. ??

Kind regards, Vasya