Hello,<br><br>&nbsp;&nbsp;&nbsp;&nbsp; Here is a code snippet:<br>type Resource = TVar Int<br><br>putR :: Resource -&gt; Int -&gt; STM ()<br>putR r i = do { v &lt;- readTVar r;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeTVar r (v + i) }<br><br>getR :: Resource -&gt; Int -&gt; STM ()
<br>getR r i = do { v &lt;- readTVar r;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (v &lt; i) then retry<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else writeTVar r (v-i)}<br><br>createR :: Int -&gt; STM (Resource)<br>createR i = newTVar i<br><br>main = do {atomic (r &lt;- (createR 1); putR r 1)}
<br><br>Strangely I am not getting a type error rather a syntax on the &quot;&lt;-&quot; in main. ??<br><br>Kind regards, Vasya<br><br>