patterns-0.0.1: src/Factory.hs
{-# OPTIONS -fglasgow-exts -fno-cse #-}
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