content: {-# OPTIONS -XCPP #-} 
  module PreventGoingBack ( preventBack) where
  import System.IO.Unsafe
  import Control.Concurrent.MVar
  
  -- #define ALONE -- to execute it alone, uncomment this
  #ifdef ALONE
  import MFlow.Wai.Blaze.Html.All
  main= runNavigation "" $ transientNav preventBack
  #else
  import MFlow.Wai.Blaze.Html.All hiding(page)
  import Menu
  #endif
  
  rpaid= unsafePerformIO $ newMVar (0 :: Int)
  
  
  preventBack= do
      page  $ wlink "don't care" << b << "press here to pay 100000 $ "
      payIt
      paid  <- liftIO $ readMVar rpaid
      preventGoingBack . page  $ p << "You already paid 100000 before"
                             ++> p << "you can not go back until the end of the buy process"
                             ++> wlink () << p << "Please press here to continue"
                             
      page  $   p << ("you paid "++ show paid)
          ++> wlink () << p << "Press here to go to the menu or press the back button to verify that you can not pay again"
      where
      payIt= liftIO $ do
        print "paying"
        paid <- takeMVar  rpaid
        putMVar rpaid $ paid + 100000
  
  -- to run it alone, change page by ask and uncomment this:
  --main= runNavigation "" $ transientNav preventBack
  