// ĠThis Ġfile Ġwas Ġautomatically Ġgenerated Ġfrom ĠSTM . kt Ġby ĠK nit Ġtool . ĠDo Ġnot Ġedit . Ċ package Ġarrow . fx . stm . examples . example St m 0 1 Ċ Ċ import Ġarrow . fx . stm . atomic ally Ċ import Ġarrow . fx . stm . T Var Ċ import Ġarrow . fx . stm . STM Ċ Ċ fun ĠSTM . transfer ( from : ĠT Var < Int >, Ġto : ĠT Var < Int >, Ġamount : ĠInt ): ĠUnit Ġ{ ĊĠ Ġwithdraw ( from , Ġamount ) ĊĠ Ġdeposit ( to , Ġamount ) Ċ } Ċ Ċ fun ĠSTM . deposit ( acc : ĠT Var < Int >, Ġamount : ĠInt ): ĠUnit Ġ{ ĊĠ Ġval Ġcurrent Ġ= Ġacc . read () ĊĠ Ġacc . write ( current Ġ+ Ġamount ) ĊĠ Ġ// Ġor Ġthe Ġsh orthand Ġacc . modify Ġ{ Ġit Ġ+ Ġamount Ġ} Ċ } Ċ Ċ fun ĠSTM . withdraw ( acc : ĠT Var < Int >, Ġamount : ĠInt ): ĠUnit Ġ{ ĊĠ Ġval Ġcurrent Ġ= Ġacc . read () ĊĠ Ġif Ġ( current Ġ- Ġamount Ġ>= Ġ 0 ) Ġacc . write ( current Ġ- Ġamount ) ĊĠ Ġelse Ġthrow ĠIllegalStateException (" Not Ġenough Ġmoney Ġin Ġthe Ġaccount !") Ċ } Ċ Ċ suspend Ġfun Ġmain () Ġ{ ĊĠ Ġval Ġacc 1 Ġ= ĠT Var . new ( 5 0 0 ) ĊĠ Ġval Ġacc 2 Ġ= ĠT Var . new ( 3 0 0 ) ĊĠ Ġprintln (" Balance Ġaccount Ġ 1 : Ġ${ acc 1 . unsafe Read () }") ĊĠ Ġprintln (" Balance Ġaccount Ġ 2 : Ġ${ acc 2 . unsafe Read () }") ĊĠ Ġprintln (" Perform ing Ġtransaction ") ĊĠ Ġatom ically Ġ{ Ġtransfer ( acc 1 , Ġacc 2 , Ġ 5 0 ) Ġ} ĊĠ Ġprintln (" Balance Ġaccount Ġ 1 : Ġ${ acc 1 . unsafe Read () }") ĊĠ Ġprintln (" Balance Ġaccount Ġ 2 : Ġ${ acc 2 . unsafe Read () }") Ċ } Ċ