<br>module Main where<br>import Control.Concurrent.STM<br>import Control.Concurrent<br>import System.Random<br><br>type Account = TVar Int<br><br>transfer :: Account -&gt; Account -&gt; Int -&gt; IO ()<br>transfer from to amount 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = atomically (do {deposit to amount;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; withdraw from amount})<br><br>deposit :: Account -&gt; Int -&gt; STM ()<br>deposit acc amount = withdraw acc (- amount)<br><br>withdraw :: Account -&gt; Int -&gt; STM () 
<br>withdraw acc amount<br>&nbsp;&nbsp; = do { bal &lt;- readTVar acc;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writeTVar acc (bal - amount) }<br><br>&nbsp; <br><br>When I try <br><br>withdraw (TVar 10) .. <br><br>I get &quot;Not in scope: data constructor &#39;TVar&#39;.&nbsp; OK .. &quot;Tvar&quot; is a class and not a Haskell data type ... so now what?
<br><br>Vasya<br><br><br>