module Language.Java.Paragon.Monad.Uniq ( Uniq, initUniq, getUniq ) where import Data.IORef newtype Uniq = Uniq (IORef Int) initUniq :: IO Uniq initUniq = newIORef 0 >>= return . Uniq getUniq :: Uniq -> IO Int getUniq (Uniq u) = do i <- readIORef u writeIORef u (i+1) return i