2 Shoving away gross stuff into this one module.
6 import Control.Monad.Trans.State
7 import Data.ByteString.Short (ShortByteString)
8 import Data.Functor.Identity
10 import LLVM.IRBuilder.Module
11 import LLVM.IRBuilder.Internal.SnocList
13 moduleSoFar :: MonadModuleBuilder m => ShortByteString -> m Module
15 s <- liftModuleState get
16 let ds = getSnocList (builderDefs s)
17 return $ defaultModule { moduleName = nm, moduleDefinitions = ds }
19 mostRecentDef :: Monad m => ModuleBuilderT m Definition
20 mostRecentDef = last . getSnocList . builderDefs <$> liftModuleState get
22 hoist :: Monad m => ModuleBuilder a -> ModuleBuilderT m a
23 hoist m = ModuleBuilderT $ StateT $
24 return . runIdentity . runStateT (unModuleBuilderT m)