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