diff --git a/changelog b/changelog
new file mode 100644
--- /dev/null
+++ b/changelog
@@ -0,0 +1,5 @@
+-*-change-log-*-
+
+3.4.5.3 Benjamin S. Scarlet <fgthb0@greynode.net> 2015-04-11
+	* Clean up warnings with ghc-7.10
+	* Start changelog
diff --git a/llvm-general.cabal b/llvm-general.cabal
--- a/llvm-general.cabal
+++ b/llvm-general.cabal
@@ -1,5 +1,5 @@
 name: llvm-general
-version: 3.4.5.2
+version: 3.4.5.3
 license: BSD3
 license-file: LICENSE
 author: Benjamin S.Scarlet <fgthb0@greynode.net>
@@ -16,6 +16,7 @@
 	handles almost all of the stateful complexities of using the LLVM API to build IR; and it supports moving IR not
 	only from Haskell into LLVM C++ objects, but the other direction - from LLVM C++ into Haskell.
 extra-source-files:
+  changelog
   src/LLVM/General/Internal/FFI/Analysis.h
   src/LLVM/General/Internal/FFI/BinaryOperator.h
   src/LLVM/General/Internal/FFI/Constant.h
@@ -38,7 +39,7 @@
   type: git
   location: git://github.com/bscarlet/llvm-general.git
   branch: llvm-3.4
-  tag: v3.4.5.2
+  tag: v3.4.5.3
 
 flag shared-llvm
   description: link against llvm shared rather than static library
@@ -63,10 +64,11 @@
     parsec >= 3.1.3,
     array >= 0.4.0.0,
     setenv >= 0.1.0,
-    llvm-general-pure == 3.4.5.2
+    llvm-general-pure == 3.4.5.3
   extra-libraries: stdc++
   hs-source-dirs: src
   extensions:
+    NoImplicitPrelude
     TupleSections
     DeriveDataTypeable
     EmptyDataDecls
@@ -203,8 +205,8 @@
     HUnit >= 1.2.4.2,
     test-framework-quickcheck2 >= 0.3.0.1,
     QuickCheck >= 2.5.1.1,
-    llvm-general == 3.4.5.2,
-    llvm-general-pure == 3.4.5.2,
+    llvm-general == 3.4.5.3,
+    llvm-general-pure == 3.4.5.3,
     containers >= 0.4.2.1,
     mtl >= 2.1,
     transformers >= 0.3.0.0,
diff --git a/src/Control/Monad/AnyCont.hs b/src/Control/Monad/AnyCont.hs
--- a/src/Control/Monad/AnyCont.hs
+++ b/src/Control/Monad/AnyCont.hs
@@ -12,6 +12,8 @@
     mapAnyContT
   ) where
 
+import Prelude
+
 import Control.Monad.Trans.AnyCont
 import Control.Monad.AnyCont.Class
 import Control.Monad.Trans.Class
diff --git a/src/Control/Monad/AnyCont/Class.hs b/src/Control/Monad/AnyCont/Class.hs
--- a/src/Control/Monad/AnyCont/Class.hs
+++ b/src/Control/Monad/AnyCont/Class.hs
@@ -5,6 +5,8 @@
   #-}
 module Control.Monad.AnyCont.Class where
 
+import Prelude
+
 import Control.Monad.Trans.Class
 import Control.Monad.Trans.AnyCont (AnyContT)
 import qualified Control.Monad.Trans.AnyCont as AnyCont
diff --git a/src/Control/Monad/Exceptable.hs b/src/Control/Monad/Exceptable.hs
--- a/src/Control/Monad/Exceptable.hs
+++ b/src/Control/Monad/Exceptable.hs
@@ -1,10 +1,11 @@
 {-# LANGUAGE
   GeneralizedNewtypeDeriving,
   MultiParamTypeClasses,
-  UndecidableInstances
+  UndecidableInstances,
+  CPP
   #-}
 
-module Control.Monad.Exceptable(
+module Control.Monad.Exceptable (
       -- * MonadError class
     MonadError(..),
 
@@ -32,7 +33,6 @@
     Except.Except,
     Except.ExceptT,
 
-    module Control.Monad,
     module Control.Monad.Fix,
     module Control.Monad.Trans,
     -- * Example 1: Custom Error Data Type
@@ -42,24 +42,25 @@
     -- $ExceptTExample
     ) where
 
+import Prelude
+
 import qualified Control.Monad.Trans.Except as Except
 
-import  Control.Monad.Trans
---import Control.Monad.IO.Class (MonadIO(..))
+import Control.Monad.Trans
 import Control.Monad.Signatures
---import Control.Monad.Trans.Class
 import Data.Functor.Classes
 import Data.Functor.Identity
 
---import qualified  Control.Monad.AnyCont.Class as AnyCont
-import  Control.Monad.State.Class as State
+import Control.Monad.State.Class as State
 import Control.Monad.Error.Class as Error
 
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Fix
+#if __GLASGOW_HASKELL__ < 710
 import Data.Foldable
 import Data.Traversable (Traversable(traverse))
+#endif
 
 
 {- |
diff --git a/src/Control/Monad/Trans/AnyCont.hs b/src/Control/Monad/Trans/AnyCont.hs
--- a/src/Control/Monad/Trans/AnyCont.hs
+++ b/src/Control/Monad/Trans/AnyCont.hs
@@ -3,7 +3,8 @@
   #-}
 module Control.Monad.Trans.AnyCont where
 
-import Control.Applicative
+import LLVM.General.Prelude
+
 import Control.Monad.Cont
 
 newtype AnyContT m a = AnyContT { unAnyContT :: forall r . ContT r m a }
diff --git a/src/LLVM/General/CodeGenOpt.hs b/src/LLVM/General/CodeGenOpt.hs
--- a/src/LLVM/General/CodeGenOpt.hs
+++ b/src/LLVM/General/CodeGenOpt.hs
@@ -1,7 +1,7 @@
 -- | Code generation options, used in specifying TargetMachine
 module LLVM.General.CodeGenOpt where
 
-import Data.Data
+import LLVM.General.Prelude
 
 -- | <http://llvm.org/doxygen/namespacellvm_1_1CodeGenOpt.html>
 data Level
diff --git a/src/LLVM/General/CodeModel.hs b/src/LLVM/General/CodeModel.hs
--- a/src/LLVM/General/CodeModel.hs
+++ b/src/LLVM/General/CodeModel.hs
@@ -1,7 +1,7 @@
 -- | Relocations, used in specifying TargetMachine
 module LLVM.General.CodeModel where
 
-import Data.Data
+import LLVM.General.Prelude
 
 -- | <http://llvm.org/doxygen/namespacellvm_1_1CodeModel.html>
 data Model
diff --git a/src/LLVM/General/Diagnostic.hs b/src/LLVM/General/Diagnostic.hs
--- a/src/LLVM/General/Diagnostic.hs
+++ b/src/LLVM/General/Diagnostic.hs
@@ -5,7 +5,7 @@
   diagnosticDisplay
  ) where
 
-import Data.Data
+import LLVM.General.Prelude
 
 -- | What kind of problem does a diagnostic describe?
 data DiagnosticKind 
diff --git a/src/LLVM/General/Internal/Analysis.hs b/src/LLVM/General/Internal/Analysis.hs
--- a/src/LLVM/General/Internal/Analysis.hs
+++ b/src/LLVM/General/Internal/Analysis.hs
@@ -1,5 +1,7 @@
 module LLVM.General.Internal.Analysis where
 
+import LLVM.General.Prelude
+
 import Control.Monad.Exceptable
 import Control.Monad.AnyCont
 
diff --git a/src/LLVM/General/Internal/Atomicity.hs b/src/LLVM/General/Internal/Atomicity.hs
--- a/src/LLVM/General/Internal/Atomicity.hs
+++ b/src/LLVM/General/Internal/Atomicity.hs
@@ -4,14 +4,13 @@
   #-}
 module LLVM.General.Internal.Atomicity where
 
-import Control.Monad
+import LLVM.General.Prelude
 
 import Data.Maybe
 
 import qualified LLVM.General.Internal.FFI.LLVMCTypes as FFI
 
 import LLVM.General.Internal.Coding
-
 import qualified LLVM.General.AST as A
 
 genCodingInstance [t| Maybe A.MemoryOrdering |] ''FFI.MemoryOrdering [
diff --git a/src/LLVM/General/Internal/Attribute.hs b/src/LLVM/General/Internal/Attribute.hs
--- a/src/LLVM/General/Internal/Attribute.hs
+++ b/src/LLVM/General/Internal/Attribute.hs
@@ -5,10 +5,11 @@
   #-}
 module LLVM.General.Internal.Attribute where
 
-import Language.Haskell.TH
+import LLVM.General.Prelude
+
+import LLVM.General.TH
 import Language.Haskell.TH.Quote
 
-import Data.Data
 import Data.List (genericSplitAt)
 
 import Data.Bits
@@ -39,7 +40,7 @@
       TyConI (NewtypeD _ _ _ (NormalC ctcn _) _) <- reify ctn
       let zero = [| $(conE ctcn) 0 |]
       sequence [
-        instanceD (sequence [classP ''Monad [m]]) [t| EncodeM $(m) [$(type')] $(conT ctn) |] [
+        instanceD (sequence [appT (conT ''Monad) m]) [t| EncodeM $(m) [$(type')] $(conT ctn) |] [
           funD (mkName "encodeM") [
             clause [] (normalB [| return . (
               let
@@ -66,7 +67,7 @@
  
         -- build a decoder which uses bit masking for multiple fields at once
         -- to eliminate multiple absent attributes in fewer tests
-        instanceD (sequence [classP ''Monad [m]]) [t| DecodeM $(m) [$(type')] $(conT ctn) |] [
+        instanceD (sequence [appT (conT ''Monad) m]) [t| DecodeM $(m) [$(type')] $(conT ctn) |] [
           funD (mkName "decodeM") [
             do
               bits <- newName "bits"
diff --git a/src/LLVM/General/Internal/BasicBlock.hs b/src/LLVM/General/Internal/BasicBlock.hs
--- a/src/LLVM/General/Internal/BasicBlock.hs
+++ b/src/LLVM/General/Internal/BasicBlock.hs
@@ -1,6 +1,7 @@
 module LLVM.General.Internal.BasicBlock where
 
-import Control.Monad
+import LLVM.General.Prelude
+
 import Control.Monad.Trans
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/CallingConvention.hs b/src/LLVM/General/Internal/CallingConvention.hs
--- a/src/LLVM/General/Internal/CallingConvention.hs
+++ b/src/LLVM/General/Internal/CallingConvention.hs
@@ -5,6 +5,8 @@
   #-}
 module LLVM.General.Internal.CallingConvention where
 
+import LLVM.General.Prelude
+
 import LLVM.General.Internal.Coding
 import Foreign.C.Types (CUInt(..))
 
diff --git a/src/LLVM/General/Internal/Coding.hs b/src/LLVM/General/Internal/Coding.hs
--- a/src/LLVM/General/Internal/Coding.hs
+++ b/src/LLVM/General/Internal/Coding.hs
@@ -6,16 +6,13 @@
   #-}
 module LLVM.General.Internal.Coding where
 
+import LLVM.General.Prelude
+
 import Language.Haskell.TH
 import Language.Haskell.TH.Quote
 
-import Control.Monad
 import Control.Monad.AnyCont
 import Control.Monad.IO.Class
-
-import Data.Data (Data)
-import Data.Word (Word, Word32, Word64)
-import Data.Int (Int32)
 
 import Foreign.C
 import Foreign.Ptr
diff --git a/src/LLVM/General/Internal/CommandLine.hs b/src/LLVM/General/Internal/CommandLine.hs
--- a/src/LLVM/General/Internal/CommandLine.hs
+++ b/src/LLVM/General/Internal/CommandLine.hs
@@ -1,11 +1,13 @@
 module LLVM.General.Internal.CommandLine where
 
-import qualified LLVM.General.Internal.FFI.CommandLine as FFI
-
-import Foreign.Ptr
+import LLVM.General.Prelude
 
 import Control.Monad.AnyCont
 import Control.Monad.IO.Class
+
+import Foreign.Ptr
+
+import qualified LLVM.General.Internal.FFI.CommandLine as FFI
 
 import LLVM.General.Internal.Coding
 import LLVM.General.Internal.String ()
diff --git a/src/LLVM/General/Internal/Constant.hs b/src/LLVM/General/Internal/Constant.hs
--- a/src/LLVM/General/Internal/Constant.hs
+++ b/src/LLVM/General/Internal/Constant.hs
@@ -6,15 +6,16 @@
   #-}
 module LLVM.General.Internal.Constant where
 
+import LLVM.General.Prelude
+
 import qualified Language.Haskell.TH as TH
 import qualified Language.Haskell.TH.Quote as TH
 import qualified LLVM.General.Internal.InstructionDefs as ID
 
-import Control.Applicative
-import Data.Word (Word32, Word64)
 import Data.Bits
-import Control.Monad.State
+import Control.Monad.State (get, gets, modify, evalState)
 import Control.Monad.AnyCont
+import Control.Monad.IO.Class
 
 import qualified Data.Map as Map
 import Foreign.Ptr
diff --git a/src/LLVM/General/Internal/Context.hs b/src/LLVM/General/Internal/Context.hs
--- a/src/LLVM/General/Internal/Context.hs
+++ b/src/LLVM/General/Internal/Context.hs
@@ -1,7 +1,8 @@
 module LLVM.General.Internal.Context where
 
-import Control.Exception
+import LLVM.General.Prelude
 
+import Control.Exception
 import Control.Concurrent
 
 import Foreign.Ptr
diff --git a/src/LLVM/General/Internal/DataLayout.hs b/src/LLVM/General/Internal/DataLayout.hs
--- a/src/LLVM/General/Internal/DataLayout.hs
+++ b/src/LLVM/General/Internal/DataLayout.hs
@@ -1,5 +1,7 @@
 module LLVM.General.Internal.DataLayout where
 
+import LLVM.General.Prelude
+
 import Control.Monad.Exceptable
 import Control.Monad.AnyCont
 import Control.Exception
diff --git a/src/LLVM/General/Internal/DecodeAST.hs b/src/LLVM/General/Internal/DecodeAST.hs
--- a/src/LLVM/General/Internal/DecodeAST.hs
+++ b/src/LLVM/General/Internal/DecodeAST.hs
@@ -5,13 +5,13 @@
   #-}
 module LLVM.General.Internal.DecodeAST where
 
-import Control.Applicative
+import LLVM.General.Prelude
+
 import Control.Monad.State
 import Control.Monad.AnyCont
 
 import Foreign.Ptr
 import Foreign.C
-import Data.Word
 
 import Data.Sequence (Seq)
 import qualified Data.Sequence as Seq
diff --git a/src/LLVM/General/Internal/Diagnostic.hs b/src/LLVM/General/Internal/Diagnostic.hs
--- a/src/LLVM/General/Internal/Diagnostic.hs
+++ b/src/LLVM/General/Internal/Diagnostic.hs
@@ -4,6 +4,8 @@
   #-}  
 module LLVM.General.Internal.Diagnostic where
 
+import LLVM.General.Prelude
+
 import qualified LLVM.General.Internal.FFI.LLVMCTypes as FFI
 import qualified LLVM.General.Internal.FFI.SMDiagnostic as FFI
 
diff --git a/src/LLVM/General/Internal/EncodeAST.hs b/src/LLVM/General/Internal/EncodeAST.hs
--- a/src/LLVM/General/Internal/EncodeAST.hs
+++ b/src/LLVM/General/Internal/EncodeAST.hs
@@ -5,7 +5,8 @@
   #-}
 module LLVM.General.Internal.EncodeAST where
 
-import Control.Applicative
+import LLVM.General.Prelude
+
 import Control.Exception
 import Control.Monad.State
 import Control.Monad.Exceptable
diff --git a/src/LLVM/General/Internal/ExecutionEngine.hs b/src/LLVM/General/Internal/ExecutionEngine.hs
--- a/src/LLVM/General/Internal/ExecutionEngine.hs
+++ b/src/LLVM/General/Internal/ExecutionEngine.hs
@@ -5,13 +5,13 @@
   #-}
 module LLVM.General.Internal.ExecutionEngine where
 
+import LLVM.General.Prelude
+
 import Control.Exception
-import Control.Monad
 import Control.Monad.IO.Class
 import Control.Monad.AnyCont
 import Control.Monad.Exceptable
 
-import Data.Word
 import Data.IORef
 import Foreign.Ptr
 import Foreign.C (CUInt, CString)
diff --git a/src/LLVM/General/Internal/FFI/Analysis.hs b/src/LLVM/General/Internal/FFI/Analysis.hs
--- a/src/LLVM/General/Internal/FFI/Analysis.hs
+++ b/src/LLVM/General/Internal/FFI/Analysis.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.FFI.Analysis where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Assembly.hs b/src/LLVM/General/Internal/FFI/Assembly.hs
--- a/src/LLVM/General/Internal/FFI/Assembly.hs
+++ b/src/LLVM/General/Internal/FFI/Assembly.hs
@@ -5,6 +5,8 @@
 -- | Functions to read and write textual LLVM assembly
 module LLVM.General.Internal.FFI.Assembly where
 
+import LLVM.General.Prelude
+
 import LLVM.General.Internal.FFI.Context 
 import LLVM.General.Internal.FFI.MemoryBuffer
 import LLVM.General.Internal.FFI.Module
diff --git a/src/LLVM/General/Internal/FFI/BasicBlock.hs b/src/LLVM/General/Internal/FFI/BasicBlock.hs
--- a/src/LLVM/General/Internal/FFI/BasicBlock.hs
+++ b/src/LLVM/General/Internal/FFI/BasicBlock.hs
@@ -6,6 +6,8 @@
 -- | <http://llvm.org/doxygen/classllvm_1_1BasicBlock.html>
 module LLVM.General.Internal.FFI.BasicBlock where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 
 import LLVM.General.Internal.FFI.PtrHierarchy
diff --git a/src/LLVM/General/Internal/FFI/BinaryOperator.hs b/src/LLVM/General/Internal/FFI/BinaryOperator.hs
--- a/src/LLVM/General/Internal/FFI/BinaryOperator.hs
+++ b/src/LLVM/General/Internal/FFI/BinaryOperator.hs
@@ -6,6 +6,8 @@
 -- | FFI functions for handling the LLVM BinaryOperator class
 module LLVM.General.Internal.FFI.BinaryOperator where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Bitcode.hs b/src/LLVM/General/Internal/FFI/Bitcode.hs
--- a/src/LLVM/General/Internal/FFI/Bitcode.hs
+++ b/src/LLVM/General/Internal/FFI/Bitcode.hs
@@ -5,6 +5,8 @@
 -- | Functions to read and write LLVM bitcode
 module LLVM.General.Internal.FFI.Bitcode where
 
+import LLVM.General.Prelude
+
 import LLVM.General.Internal.FFI.RawOStream
 import LLVM.General.Internal.FFI.Context 
 import LLVM.General.Internal.FFI.MemoryBuffer
diff --git a/src/LLVM/General/Internal/FFI/Builder.hs b/src/LLVM/General/Internal/FFI/Builder.hs
--- a/src/LLVM/General/Internal/FFI/Builder.hs
+++ b/src/LLVM/General/Internal/FFI/Builder.hs
@@ -7,19 +7,18 @@
 -- | FFI glue for llvm::IRBuilder - llvm's IR construction state object
 module LLVM.General.Internal.FFI.Builder where
 
-import qualified Language.Haskell.TH as TH
-
-import Control.Monad
-
-import qualified LLVM.General.AST.Instruction as A
+import LLVM.General.Prelude
 
-import LLVM.General.Internal.InstructionDefs as ID
+import qualified Language.Haskell.TH as TH
 
 import Foreign.Ptr
 import Foreign.C
 
 import qualified Data.List as List
 import qualified Data.Map as Map
+
+import qualified LLVM.General.AST.Instruction as A
+import LLVM.General.Internal.InstructionDefs as ID
 
 import LLVM.General.Internal.FFI.Cleanup
 import LLVM.General.Internal.FFI.Context
diff --git a/src/LLVM/General/Internal/FFI/ByteRangeCallback.hs b/src/LLVM/General/Internal/FFI/ByteRangeCallback.hs
--- a/src/LLVM/General/Internal/FFI/ByteRangeCallback.hs
+++ b/src/LLVM/General/Internal/FFI/ByteRangeCallback.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.FFI.ByteRangeCallback where
 
+import LLVM.General.Prelude
+
 import Foreign.C
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/FFI/Cleanup.hs b/src/LLVM/General/Internal/FFI/Cleanup.hs
--- a/src/LLVM/General/Internal/FFI/Cleanup.hs
+++ b/src/LLVM/General/Internal/FFI/Cleanup.hs
@@ -3,13 +3,11 @@
   #-}
 module LLVM.General.Internal.FFI.Cleanup where
 
+import LLVM.General.Prelude
+
 import Language.Haskell.TH
-import Control.Monad
 import Data.Sequence as Seq
-import Data.Foldable (toList)
 
-import Data.Word
-import Data.Int
 import Foreign.C
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/FFI/CommandLine.hs b/src/LLVM/General/Internal/FFI/CommandLine.hs
--- a/src/LLVM/General/Internal/FFI/CommandLine.hs
+++ b/src/LLVM/General/Internal/FFI/CommandLine.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.FFI.CommandLine where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Constant.hs b/src/LLVM/General/Internal/FFI/Constant.hs
--- a/src/LLVM/General/Internal/FFI/Constant.hs
+++ b/src/LLVM/General/Internal/FFI/Constant.hs
@@ -8,12 +8,12 @@
 -- | FFI functions for handling the LLVM Constant class
 module LLVM.General.Internal.FFI.Constant where
 
+import LLVM.General.Prelude
+
 import qualified Language.Haskell.TH as TH
 import qualified LLVM.General.Internal.InstructionDefs as ID
 
-import Control.Monad
 import qualified Data.Map as Map
-import Data.Word
 
 import Foreign.Ptr
 import Foreign.C
diff --git a/src/LLVM/General/Internal/FFI/Context.hs b/src/LLVM/General/Internal/FFI/Context.hs
--- a/src/LLVM/General/Internal/FFI/Context.hs
+++ b/src/LLVM/General/Internal/FFI/Context.hs
@@ -8,6 +8,8 @@
 -- | This choice allows multiple threads to do independent work with LLVM safely.
 module LLVM.General.Internal.FFI.Context where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 
 -- | a blind type to correspond to LLVMContext
diff --git a/src/LLVM/General/Internal/FFI/DataLayout.hs b/src/LLVM/General/Internal/FFI/DataLayout.hs
--- a/src/LLVM/General/Internal/FFI/DataLayout.hs
+++ b/src/LLVM/General/Internal/FFI/DataLayout.hs
@@ -4,6 +4,8 @@
 
 module LLVM.General.Internal.FFI.DataLayout where
 
+import LLVM.General.Prelude
+
 import Foreign.C.String
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/FFI/ExecutionEngine.hs b/src/LLVM/General/Internal/FFI/ExecutionEngine.hs
--- a/src/LLVM/General/Internal/FFI/ExecutionEngine.hs
+++ b/src/LLVM/General/Internal/FFI/ExecutionEngine.hs
@@ -4,6 +4,8 @@
 
 module LLVM.General.Internal.FFI.ExecutionEngine where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Function.hs b/src/LLVM/General/Internal/FFI/Function.hs
--- a/src/LLVM/General/Internal/FFI/Function.hs
+++ b/src/LLVM/General/Internal/FFI/Function.hs
@@ -5,6 +5,8 @@
 
 module LLVM.General.Internal.FFI.Function where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/GlobalAlias.hs b/src/LLVM/General/Internal/FFI/GlobalAlias.hs
--- a/src/LLVM/General/Internal/FFI/GlobalAlias.hs
+++ b/src/LLVM/General/Internal/FFI/GlobalAlias.hs
@@ -6,6 +6,8 @@
 -- | FFI functions for handling the LLVM GlobalAlias class
 module LLVM.General.Internal.FFI.GlobalAlias where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 
 import LLVM.General.Internal.FFI.PtrHierarchy
diff --git a/src/LLVM/General/Internal/FFI/GlobalValue.hs b/src/LLVM/General/Internal/FFI/GlobalValue.hs
--- a/src/LLVM/General/Internal/FFI/GlobalValue.hs
+++ b/src/LLVM/General/Internal/FFI/GlobalValue.hs
@@ -6,6 +6,8 @@
 -- | FFI functions for handling the LLVM GlobalValue class
 module LLVM.General.Internal.FFI.GlobalValue where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/GlobalVariable.hs b/src/LLVM/General/Internal/FFI/GlobalVariable.hs
--- a/src/LLVM/General/Internal/FFI/GlobalVariable.hs
+++ b/src/LLVM/General/Internal/FFI/GlobalVariable.hs
@@ -6,6 +6,8 @@
 -- | FFI functions for handling the LLVM GlobalVariable class
 module LLVM.General.Internal.FFI.GlobalVariable where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/InlineAssembly.hs b/src/LLVM/General/Internal/FFI/InlineAssembly.hs
--- a/src/LLVM/General/Internal/FFI/InlineAssembly.hs
+++ b/src/LLVM/General/Internal/FFI/InlineAssembly.hs
@@ -4,6 +4,8 @@
 
 module LLVM.General.Internal.FFI.InlineAssembly where
 
+import LLVM.General.Prelude
+
 import Foreign.C
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/FFI/Instruction.hs b/src/LLVM/General/Internal/FFI/Instruction.hs
--- a/src/LLVM/General/Internal/FFI/Instruction.hs
+++ b/src/LLVM/General/Internal/FFI/Instruction.hs
@@ -6,7 +6,8 @@
   #-}
 module LLVM.General.Internal.FFI.Instruction where
 
-import Control.Monad
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/InstructionDefs.hsc b/src/LLVM/General/Internal/FFI/InstructionDefs.hsc
--- a/src/LLVM/General/Internal/FFI/InstructionDefs.hsc
+++ b/src/LLVM/General/Internal/FFI/InstructionDefs.hsc
@@ -2,6 +2,8 @@
 -- so it may be accessed conveniently with Template Haskell code
 module LLVM.General.Internal.FFI.InstructionDefs where
 
+import LLVM.General.Prelude
+
 import LLVM.General.Internal.FFI.LLVMCTypes
 
 #define FIRST_TERM_INST(num) struct inst { const char *kind; int opcode; const char *name; const char *clas; } insts[] = { { "Terminator", },
diff --git a/src/LLVM/General/Internal/FFI/Iterate.hs b/src/LLVM/General/Internal/FFI/Iterate.hs
--- a/src/LLVM/General/Internal/FFI/Iterate.hs
+++ b/src/LLVM/General/Internal/FFI/Iterate.hs
@@ -1,8 +1,8 @@
 -- | Functions to help handle LLVM iteration patterns
 module LLVM.General.Internal.FFI.Iterate where
 
-import Control.Monad
-import Data.Functor
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 
 -- | retrieve a sequence of objects which form a linked list, given an action to
diff --git a/src/LLVM/General/Internal/FFI/LLVMCTypes.hsc b/src/LLVM/General/Internal/FFI/LLVMCTypes.hsc
--- a/src/LLVM/General/Internal/FFI/LLVMCTypes.hsc
+++ b/src/LLVM/General/Internal/FFI/LLVMCTypes.hsc
@@ -5,6 +5,8 @@
 -- Encapsulate hsc macro weirdness here, supporting higher-level tricks elsewhere.
 module LLVM.General.Internal.FFI.LLVMCTypes where
 
+import LLVM.General.Prelude
+
 #define __STDC_LIMIT_MACROS
 #include "llvm-c/Core.h"
 #include "llvm-c/Target.h"
@@ -25,7 +27,6 @@
 
 import Language.Haskell.TH.Quote
 
-import Data.Data
 import Data.Bits
 import Foreign.C
 import Foreign.Storable
diff --git a/src/LLVM/General/Internal/FFI/MemoryBuffer.hs b/src/LLVM/General/Internal/FFI/MemoryBuffer.hs
--- a/src/LLVM/General/Internal/FFI/MemoryBuffer.hs
+++ b/src/LLVM/General/Internal/FFI/MemoryBuffer.hs
@@ -3,10 +3,12 @@
   #-}
 module LLVM.General.Internal.FFI.MemoryBuffer where
 
-import LLVM.General.Internal.FFI.LLVMCTypes
+import LLVM.General.Prelude
 
 import Foreign.Ptr
 import Foreign.C
+
+import LLVM.General.Internal.FFI.LLVMCTypes
 
 data MemoryBuffer
 
diff --git a/src/LLVM/General/Internal/FFI/Metadata.hs b/src/LLVM/General/Internal/FFI/Metadata.hs
--- a/src/LLVM/General/Internal/FFI/Metadata.hs
+++ b/src/LLVM/General/Internal/FFI/Metadata.hs
@@ -5,6 +5,8 @@
 
 module LLVM.General.Internal.FFI.Metadata where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Module.hs b/src/LLVM/General/Internal/FFI/Module.hs
--- a/src/LLVM/General/Internal/FFI/Module.hs
+++ b/src/LLVM/General/Internal/FFI/Module.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.FFI.Module where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/PassManager.hs b/src/LLVM/General/Internal/FFI/PassManager.hs
--- a/src/LLVM/General/Internal/FFI/PassManager.hs
+++ b/src/LLVM/General/Internal/FFI/PassManager.hs
@@ -5,11 +5,9 @@
 
 module LLVM.General.Internal.FFI.PassManager where
 
-import qualified Language.Haskell.TH as TH
-
-import Control.Monad
+import LLVM.General.Prelude
 
-import Data.Word
+import qualified Language.Haskell.TH as TH
 
 import Foreign.Ptr
 import Foreign.C
diff --git a/src/LLVM/General/Internal/FFI/PtrHierarchy.hs b/src/LLVM/General/Internal/FFI/PtrHierarchy.hs
--- a/src/LLVM/General/Internal/FFI/PtrHierarchy.hs
+++ b/src/LLVM/General/Internal/FFI/PtrHierarchy.hs
@@ -14,6 +14,8 @@
 -- | This module defines typeclasses to represent the relationships of an object-oriented inheritance hierarchy
 module LLVM.General.Internal.FFI.PtrHierarchy where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 
 -- | a class to represent safe casting of pointers to objects of descendant-classes to ancestor-classes.
diff --git a/src/LLVM/General/Internal/FFI/RawOStream.hs b/src/LLVM/General/Internal/FFI/RawOStream.hs
--- a/src/LLVM/General/Internal/FFI/RawOStream.hs
+++ b/src/LLVM/General/Internal/FFI/RawOStream.hs
@@ -3,12 +3,13 @@
   #-}
 module LLVM.General.Internal.FFI.RawOStream where
 
-import LLVM.General.Internal.FFI.ByteRangeCallback
+import LLVM.General.Prelude
 
 import Foreign.Ptr
 import Foreign.C
 import Control.Exception (bracket)
 
+import LLVM.General.Internal.FFI.ByteRangeCallback
 import LLVM.General.Internal.FFI.LLVMCTypes
 
 data RawOStream
diff --git a/src/LLVM/General/Internal/FFI/SMDiagnostic.hs b/src/LLVM/General/Internal/FFI/SMDiagnostic.hs
--- a/src/LLVM/General/Internal/FFI/SMDiagnostic.hs
+++ b/src/LLVM/General/Internal/FFI/SMDiagnostic.hs
@@ -4,6 +4,8 @@
 -- | FFI functions for handling the LLVM SMDiagnostic class
 module LLVM.General.Internal.FFI.SMDiagnostic where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Target.hs b/src/LLVM/General/Internal/FFI/Target.hs
--- a/src/LLVM/General/Internal/FFI/Target.hs
+++ b/src/LLVM/General/Internal/FFI/Target.hs
@@ -4,6 +4,8 @@
   #-}
 module LLVM.General.Internal.FFI.Target where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Threading.hs b/src/LLVM/General/Internal/FFI/Threading.hs
--- a/src/LLVM/General/Internal/FFI/Threading.hs
+++ b/src/LLVM/General/Internal/FFI/Threading.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.FFI.Threading where
 
+import LLVM.General.Prelude
+
 import Foreign.C
 
 import LLVM.General.Internal.FFI.LLVMCTypes
diff --git a/src/LLVM/General/Internal/FFI/Transforms.hs b/src/LLVM/General/Internal/FFI/Transforms.hs
--- a/src/LLVM/General/Internal/FFI/Transforms.hs
+++ b/src/LLVM/General/Internal/FFI/Transforms.hs
@@ -1,6 +1,8 @@
 -- | Code used with Template Haskell to build the FFI for transform passes.
 module LLVM.General.Internal.FFI.Transforms where
 
+import LLVM.General.Prelude
+
 -- | does the constructor for this pass require a TargetMachine object
 needsTargetMachine "CodeGenPrepare" = True
 needsTargetMachine "LowerInvoke" = True
diff --git a/src/LLVM/General/Internal/FFI/Type.hs b/src/LLVM/General/Internal/FFI/Type.hs
--- a/src/LLVM/General/Internal/FFI/Type.hs
+++ b/src/LLVM/General/Internal/FFI/Type.hs
@@ -4,9 +4,10 @@
 -- | Functions for handling the LLVM types
 module LLVM.General.Internal.FFI.Type where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
-import Data.Word
 
 import LLVM.General.Internal.FFI.LLVMCTypes
 import LLVM.General.Internal.FFI.Context
diff --git a/src/LLVM/General/Internal/FFI/User.hs b/src/LLVM/General/Internal/FFI/User.hs
--- a/src/LLVM/General/Internal/FFI/User.hs
+++ b/src/LLVM/General/Internal/FFI/User.hs
@@ -6,6 +6,8 @@
 -- | FFI functions for handling the LLVM User class
 module LLVM.General.Internal.FFI.User where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FFI/Value.hs b/src/LLVM/General/Internal/FFI/Value.hs
--- a/src/LLVM/General/Internal/FFI/Value.hs
+++ b/src/LLVM/General/Internal/FFI/Value.hs
@@ -6,6 +6,8 @@
 -- | FFI functions for handling the LLVM Value class
 module LLVM.General.Internal.FFI.Value where
 
+import LLVM.General.Prelude
+
 import Foreign.Ptr
 import Foreign.C
 
diff --git a/src/LLVM/General/Internal/FastMathFlags.hs b/src/LLVM/General/Internal/FastMathFlags.hs
--- a/src/LLVM/General/Internal/FastMathFlags.hs
+++ b/src/LLVM/General/Internal/FastMathFlags.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.FastMathFlags where
 
+import LLVM.General.Prelude
+
 import Control.Monad.Trans
 import Control.Monad.AnyCont
 import Control.Monad.State
diff --git a/src/LLVM/General/Internal/Function.hs b/src/LLVM/General/Internal/Function.hs
--- a/src/LLVM/General/Internal/Function.hs
+++ b/src/LLVM/General/Internal/Function.hs
@@ -1,6 +1,7 @@
 module LLVM.General.Internal.Function where
 
-import Control.Monad
+import LLVM.General.Prelude
+
 import Control.Monad.Trans
 import Control.Monad.AnyCont
 
diff --git a/src/LLVM/General/Internal/Global.hs b/src/LLVM/General/Internal/Global.hs
--- a/src/LLVM/General/Internal/Global.hs
+++ b/src/LLVM/General/Internal/Global.hs
@@ -4,12 +4,11 @@
   #-}
 module LLVM.General.Internal.Global where
 
+import LLVM.General.Prelude
+
 import Control.Monad.IO.Class
-import Data.Functor
 import Foreign.Ptr
 import Control.Monad.AnyCont
-
-import Data.Word
 
 import qualified LLVM.General.Internal.FFI.PtrHierarchy as FFI
 import qualified LLVM.General.Internal.FFI.LLVMCTypes as FFI
diff --git a/src/LLVM/General/Internal/Inject.hs b/src/LLVM/General/Internal/Inject.hs
--- a/src/LLVM/General/Internal/Inject.hs
+++ b/src/LLVM/General/Internal/Inject.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 module LLVM.General.Internal.Inject where
 
+import LLVM.General.Prelude
+
 class Inject a b where
   inject :: a -> b
 
diff --git a/src/LLVM/General/Internal/InlineAssembly.hs b/src/LLVM/General/Internal/InlineAssembly.hs
--- a/src/LLVM/General/Internal/InlineAssembly.hs
+++ b/src/LLVM/General/Internal/InlineAssembly.hs
@@ -4,7 +4,8 @@
   #-}
 module LLVM.General.Internal.InlineAssembly where
  
-import Control.Monad
+import LLVM.General.Prelude
+
 import Control.Monad.IO.Class
 
 import Foreign.C
diff --git a/src/LLVM/General/Internal/Instruction.hs b/src/LLVM/General/Internal/Instruction.hs
--- a/src/LLVM/General/Internal/Instruction.hs
+++ b/src/LLVM/General/Internal/Instruction.hs
@@ -7,16 +7,16 @@
   #-}
 module LLVM.General.Internal.Instruction where
 
+import LLVM.General.Prelude
+
 import qualified Language.Haskell.TH as TH
 import qualified Language.Haskell.TH.Quote as TH
 import qualified LLVM.General.Internal.InstructionDefs as ID
 import LLVM.General.Internal.InstructionDefs (instrP)
 
-import Data.Functor
-import Control.Monad
 import Control.Monad.Exceptable
 import Control.Monad.AnyCont
-import Control.Monad.State
+import Control.Monad.State (gets)
 
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/InstructionDefs.hs b/src/LLVM/General/Internal/InstructionDefs.hs
--- a/src/LLVM/General/Internal/InstructionDefs.hs
+++ b/src/LLVM/General/Internal/InstructionDefs.hs
@@ -12,6 +12,8 @@
   outerJoin
   ) where
 
+import LLVM.General.Prelude
+
 import qualified Language.Haskell.TH as TH
 import qualified Language.Haskell.TH.Quote as TH
 
diff --git a/src/LLVM/General/Internal/LibraryFunction.hsc b/src/LLVM/General/Internal/LibraryFunction.hsc
--- a/src/LLVM/General/Internal/LibraryFunction.hsc
+++ b/src/LLVM/General/Internal/LibraryFunction.hsc
@@ -3,6 +3,8 @@
  #-}
 module LLVM.General.Internal.LibraryFunction where
 
+import LLVM.General.Prelude
+
 import qualified LLVM.General.Internal.FFI.LLVMCTypes as FFI
 
 import LLVM.General.Internal.Coding
diff --git a/src/LLVM/General/Internal/MemoryBuffer.hs b/src/LLVM/General/Internal/MemoryBuffer.hs
--- a/src/LLVM/General/Internal/MemoryBuffer.hs
+++ b/src/LLVM/General/Internal/MemoryBuffer.hs
@@ -4,8 +4,9 @@
   #-}
 module LLVM.General.Internal.MemoryBuffer where
 
+import LLVM.General.Prelude
+
 import Control.Exception
-import Control.Monad
 import Control.Monad.Exceptable
 import Control.Monad.AnyCont
 import qualified Data.ByteString as BS
diff --git a/src/LLVM/General/Internal/Metadata.hs b/src/LLVM/General/Internal/Metadata.hs
--- a/src/LLVM/General/Internal/Metadata.hs
+++ b/src/LLVM/General/Internal/Metadata.hs
@@ -3,7 +3,9 @@
   #-}
 module LLVM.General.Internal.Metadata where
 
-import Control.Monad.State
+import LLVM.General.Prelude
+
+import Control.Monad.State hiding (mapM, forM)
 import Control.Monad.AnyCont
 
 import Foreign.Ptr
diff --git a/src/LLVM/General/Internal/Module.hs b/src/LLVM/General/Internal/Module.hs
--- a/src/LLVM/General/Internal/Module.hs
+++ b/src/LLVM/General/Internal/Module.hs
@@ -7,11 +7,12 @@
 -- | This Haskell module is for/of functions for handling LLVM modules.
 module LLVM.General.Internal.Module where
 
+import LLVM.General.Prelude
+
 import Control.Monad.Trans
-import Control.Monad.State
+import Control.Monad.State (gets)
 import Control.Monad.Exceptable
 import Control.Monad.AnyCont
-import Control.Applicative
 import Control.Exception
 
 import Foreign.Ptr
diff --git a/src/LLVM/General/Internal/Operand.hs b/src/LLVM/General/Internal/Operand.hs
--- a/src/LLVM/General/Internal/Operand.hs
+++ b/src/LLVM/General/Internal/Operand.hs
@@ -3,7 +3,8 @@
   #-}
 module LLVM.General.Internal.Operand where
 
-import Data.Functor
+import LLVM.General.Prelude
+
 import Control.Monad.State
 import Control.Monad.AnyCont
 import qualified Data.Map as Map
diff --git a/src/LLVM/General/Internal/PassManager.hs b/src/LLVM/General/Internal/PassManager.hs
--- a/src/LLVM/General/Internal/PassManager.hs
+++ b/src/LLVM/General/Internal/PassManager.hs
@@ -4,17 +4,15 @@
   #-}
 module LLVM.General.Internal.PassManager where
 
+import LLVM.General.Prelude
+
 import qualified Language.Haskell.TH as TH
 
 import Control.Exception
-import Control.Monad hiding (forM_)
 import Control.Monad.IO.Class
-import Control.Applicative
 
 import Control.Monad.AnyCont
 
-import Data.Word
-import Data.Foldable (forM_)
 import Foreign.C (CString)
 import Foreign.Ptr
 
diff --git a/src/LLVM/General/Internal/RawOStream.hs b/src/LLVM/General/Internal/RawOStream.hs
--- a/src/LLVM/General/Internal/RawOStream.hs
+++ b/src/LLVM/General/Internal/RawOStream.hs
@@ -1,6 +1,7 @@
 module LLVM.General.Internal.RawOStream where
 
-import Control.Monad
+import LLVM.General.Prelude
+
 import Control.Monad.Exceptable
 import Control.Monad.AnyCont
 
diff --git a/src/LLVM/General/Internal/String.hs b/src/LLVM/General/Internal/String.hs
--- a/src/LLVM/General/Internal/String.hs
+++ b/src/LLVM/General/Internal/String.hs
@@ -4,8 +4,9 @@
   #-}
 module LLVM.General.Internal.String where
 
+import LLVM.General.Prelude
+
 import Control.Arrow
-import Control.Monad
 import Control.Monad.AnyCont
 import Control.Monad.IO.Class
 import Control.Exception (finally)
diff --git a/src/LLVM/General/Internal/Target.hs b/src/LLVM/General/Internal/Target.hs
--- a/src/LLVM/General/Internal/Target.hs
+++ b/src/LLVM/General/Internal/Target.hs
@@ -6,11 +6,11 @@
   #-}
 module LLVM.General.Internal.Target where
 
-import Control.Monad hiding (forM)
-import Control.Monad.Exceptable hiding (forM)
+import LLVM.General.Prelude
+
+import Control.Monad.Trans.Except (runExcept)
+import Control.Monad.Exceptable
 import Control.Exception
-import Data.Functor
-import Data.Traversable (forM)
 import Control.Monad.AnyCont
 
 import Foreign.Ptr
diff --git a/src/LLVM/General/Internal/Threading.hs b/src/LLVM/General/Internal/Threading.hs
--- a/src/LLVM/General/Internal/Threading.hs
+++ b/src/LLVM/General/Internal/Threading.hs
@@ -3,9 +3,10 @@
   isMultithreaded
   ) where
 
+import LLVM.General.Prelude
+
 import Control.Concurrent.MVar
 import System.IO.Unsafe
-import Control.Monad
 
 import qualified LLVM.General.Internal.FFI.Threading as FFI
 
diff --git a/src/LLVM/General/Internal/Type.hs b/src/LLVM/General/Internal/Type.hs
--- a/src/LLVM/General/Internal/Type.hs
+++ b/src/LLVM/General/Internal/Type.hs
@@ -4,7 +4,8 @@
   #-}
 module LLVM.General.Internal.Type where
 
-import Control.Applicative
+import LLVM.General.Prelude
+
 import Control.Monad.State
 import Control.Monad.AnyCont
 import Control.Monad.Exceptable
diff --git a/src/LLVM/General/Internal/Value.hs b/src/LLVM/General/Internal/Value.hs
--- a/src/LLVM/General/Internal/Value.hs
+++ b/src/LLVM/General/Internal/Value.hs
@@ -3,6 +3,8 @@
   #-}
 module LLVM.General.Internal.Value where
 
+import LLVM.General.Prelude
+
 import Control.Monad.State
 
 import Foreign.Ptr
diff --git a/src/LLVM/General/Relocation.hs b/src/LLVM/General/Relocation.hs
--- a/src/LLVM/General/Relocation.hs
+++ b/src/LLVM/General/Relocation.hs
@@ -1,7 +1,7 @@
 -- | Relocations, used in specifying TargetMachine
 module LLVM.General.Relocation where
 
-import Data.Data
+import LLVM.General.Prelude
 
 -- | <http://llvm.org/doxygen/namespacellvm_1_1Reloc.html>
 data Model 
diff --git a/src/LLVM/General/Target/Options.hs b/src/LLVM/General/Target/Options.hs
--- a/src/LLVM/General/Target/Options.hs
+++ b/src/LLVM/General/Target/Options.hs
@@ -1,8 +1,7 @@
 -- | <http://llvm.org/doxygen/classllvm_1_1TargetOptions.html>
 module LLVM.General.Target.Options where
 
-import Data.Data
-import Data.Word
+import LLVM.General.Prelude
 
 -- | <http://llvm.org/doxygen/namespacellvm_1_1FloatABI.html#aea077c52d84934aabf9445cef9eab2e2>
 data FloatABI
diff --git a/src/LLVM/General/Transforms.hs b/src/LLVM/General/Transforms.hs
--- a/src/LLVM/General/Transforms.hs
+++ b/src/LLVM/General/Transforms.hs
@@ -4,8 +4,7 @@
 -- instead using 'LLVM.General.PassManager.CuratedPassSetSpec'.
 module LLVM.General.Transforms where
 
-import Data.Data
-import Data.Word
+import LLVM.General.Prelude
 
 -- | <http://llvm.org/docs/Passes.html#transform-passes>
 -- A few passes can make use of information in a 'LLVM.General.Target.TargetMachine' if one
