X-Git-Url: https://git.lukelau.me/?p=kaleidoscope-hs.git;a=blobdiff_plain;f=Utils.hs;fp=Utils.hs;h=2a83c3591276ea116a969301fd4f24ae772af949;hp=0000000000000000000000000000000000000000;hb=38600a47841e2c5837b5693b32c35d2093864458;hpb=3ccccc6ab809fb87dd929855936895fb11479e27 diff --git a/Utils.hs b/Utils.hs new file mode 100644 index 0000000..2a83c35 --- /dev/null +++ b/Utils.hs @@ -0,0 +1,17 @@ +{-| +Shoving away gross stuff into this one module. +-} +module Utils where + +import Control.Monad.Trans.State +import Data.Functor.Identity +import LLVM.AST +import LLVM.IRBuilder.Module +import LLVM.IRBuilder.Internal.SnocList + +mostRecentDef :: Monad m => ModuleBuilderT m Definition +mostRecentDef = last . getSnocList . builderDefs <$> liftModuleState get + +hoist :: Monad m => ModuleBuilder a -> ModuleBuilderT m a +hoist m = ModuleBuilderT $ StateT $ + return . runIdentity . runStateT (unModuleBuilderT m)