module Factory ( mkUniqueId) where import System.IO.Unsafe import Control.Concurrent ------------------------------------------------------------------------ -- Source for unique identifiers ------------------------------------------------------------------------ {-# NOINLINE _addid #-} _addid :: MVar Int _addid = unsafePerformIO $ newMVar 1 mkUniqueId :: IO Int mkUniqueId = modifyMVar _addid $ \x -> let x' = incX x in return (x', x') incX :: Int -> Int incX i = if i == 99999999 then 1 else i+1