circ-0.0.0: Language/CIRC/Runtime.hs
-- | The runtime library for CIRC generated code.
module Language.CIRC.Runtime
( CIRC
, evalCIRC
, runCIRC
, Id
, newId
) where
import Control.Monad.State
-- | The CIRC transform monad. Used to create fresh ids.
type CIRC = State Int
-- | Evaluates a CIRC transform.
evalCIRC :: CIRC a -> Int -> a
evalCIRC = evalState
-- | Evaluates a CIRC transform, also returning the fresh next id.
runCIRC :: CIRC a -> Int -> (a, Int)
runCIRC = runState
-- | Identifiers.
type Id = String
-- | Produces a fresh id.
newId :: CIRC Id
newId = do
id <- get
put $ id + 1
return $ "__" ++ show id