import Data.IORef
import System
.IO.Unsafe
(unsafePerformIO
)
setGlobalVar
:: Int -> IO ()
(getGlobalVar,setGlobalVar) = unsafePerformIO $ do
x_ref <- newIORef 0
return (readIORef x
_ref
, writeIORef x
_ref
)
foo = do v <- (+1) <$> getGlobalVar
setGlobalVar v
bar = do v <- (*2) <$> getGlobalVar
setGlobalVar v
main = do
aW1wb3J0IERhdGEuSU9SZWYKaW1wb3J0IFN5c3RlbS5JTy5VbnNhZmUgKHVuc2FmZVBlcmZvcm1JTykKCmdldEdsb2JhbFZhciA6OiBJTyBJbnQKc2V0R2xvYmFsVmFyIDo6IEludCAtPiBJTyAoKQoKKGdldEdsb2JhbFZhcixzZXRHbG9iYWxWYXIpID0gdW5zYWZlUGVyZm9ybUlPICQgZG8KICAgIHhfcmVmIDwtIG5ld0lPUmVmIDAKICAgIHJldHVybiAocmVhZElPUmVmIHhfcmVmLCB3cml0ZUlPUmVmIHhfcmVmKQogICAgCmZvbyA9IGRvIHYgPC0gKCsxKSA8JD4gZ2V0R2xvYmFsVmFyCiAgICAgICAgIHNldEdsb2JhbFZhciB2CiAgICAgICAgIHJldHVybiB2CiAKYmFyID0gZG8gdiA8LSAoKjIpIDwkPiBnZXRHbG9iYWxWYXIKICAgICAgICAgc2V0R2xvYmFsVmFyIHYKICAgICAgICAgcmV0dXJuIHYKIAptYWluID0gZG8KCXByaW50ID08PCBmb28KCXByaW50ID08PCBiYXIKCXByaW50ID08PCBmb28KCXByaW50ID08PCBiYXIK