llvm-dsl-0.0: src/LLVM/DSL/Debug/Counter.hs
module LLVM.DSL.Debug.Counter where
import qualified Data.IORef as IORef
import qualified Data.List.HT as ListHT
newtype T ident = Cons Int
deriving (Eq, Ord)
instance Enum (T ident) where
fromEnum (Cons n) = n
toEnum n = (Cons n)
format :: Int -> T ident -> String
format pad (Cons n) = ListHT.padLeft '0' pad (show n)
new :: IO (IORef.IORef (T ident))
new = IORef.newIORef (Cons 0)
next :: IORef.IORef (T ident) -> IO (T ident)
next cnt = do
a <- IORef.readIORef cnt
IORef.modifyIORef cnt succ
return a