In deze oefening implementeren we zelf MVars met behulp van software transactional memory. Het datatype van onze software transactional MVar (STMMVAR) is simpelweg een TVar die een Maybe a waarde bevat. Wanneer de STMMVAR onbeschreven is, bevat hij een Nothing.

Schrijven naar de STMMVAR zal de waarde van de TVar dan aanpassen om de nieuwe waarde te bevatten, tenzij al een Just waarde in de TVar zat. In dat geval blijven we blokkeren tot deze in een Nothing veranderd.

Het uitlezen van een STMMVAR gebeurd op gelijkaardige wijze: als de STMMVAR een waarde bevat, geven we deze terug en wordt een Nothing de nieuwe inhoud van de TVar. Zolang de TVar leeg is, herstarten we de transactie.

Opmerking: Het testen van de volgorde en correctheid van IO operaties is nog niet ingebouwd in de huidige versie van de Judge. Test daarom jouw code ook lokaal grondig.