diff --git a/aig.cabal b/aig.cabal
--- a/aig.cabal
+++ b/aig.cabal
@@ -1,5 +1,5 @@
 Name:               aig
-Version:            0.2.3
+Version:            0.2.4
 License:            BSD3
 License-file:       LICENSE
 Author:             Galois Inc.
@@ -35,6 +35,7 @@
   ghc-options:      -Wall -fno-ignore-asserts -O2
   build-depends:
     base == 4.*,
+    base-compat >= 0.6.0,
     mtl,
     vector,
     QuickCheck >= 2.7
diff --git a/src/Data/AIG/Interface.hs b/src/Data/AIG/Interface.hs
--- a/src/Data/AIG/Interface.hs
+++ b/src/Data/AIG/Interface.hs
@@ -8,7 +8,6 @@
 
 Interfaces for building, simulating and analysing And-Inverter Graphs (AIG).
 -}
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE FunctionalDependencies #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE Rank2Types #-}
@@ -55,13 +54,9 @@
 
 import Control.Applicative
 import Control.Monad
-import Prelude hiding (not, and, or)
+import Prelude()
+import Prelude.Compat hiding (not, and, or, mapM)
 import Test.QuickCheck (Gen, Arbitrary(..), generate, oneof, sized, choose)
-
-#if !MIN_VERSION_base(4,8,0)
-import Data.Foldable (Foldable)
-import Data.Traversable (Traversable)
-#endif
 
 -- | Concrete datatype representing the ways
 --   an AIG can be constructed.
diff --git a/src/Data/AIG/Operations.hs b/src/Data/AIG/Operations.hs
--- a/src/Data/AIG/Operations.hs
+++ b/src/Data/AIG/Operations.hs
@@ -9,11 +9,11 @@
 A collection of higher-level operations (mostly 2's complement arithmetic operations)
 that can be built from the primitive And-Inverter Graph interface.
 -}
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveFunctor #-}
 {-# LANGUAGE DeriveFoldable #-}
 {-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE CPP #-}
 module Data.AIG.Operations
   ( -- * Bitvectors
     BV
@@ -127,9 +127,8 @@
 import Control.Applicative hiding (empty)
 import Control.Exception (assert)
 import qualified Control.Monad
-import Control.Monad.State hiding (zipWithM, replicateM, mapM)
+import Control.Monad.State hiding (zipWithM, replicateM, mapM, sequence)
 import Data.Bits ((.|.), setBit, shiftL, testBit)
-
 #if MIN_VERSION_base(4,8,0)
 import qualified Data.Bits as Bits
 #endif
@@ -137,16 +136,12 @@
 import qualified Data.Vector as V
 import qualified Data.Vector.Generic.Mutable as MV
 
-import Prelude
+import Prelude()
+import Prelude.Compat
   hiding (and, concat, length, not, or, replicate, splitAt, tail, (++), take, drop, zipWith, mapM)
-import qualified Prelude
+import qualified Prelude.Compat as Prelude
 
 import Data.AIG.Interface
-
-#if !MIN_VERSION_base(4,8,0)
-import Data.Foldable (Foldable)
-import Data.Traversable (Traversable)
-#endif
 
 -- | A BitVector consists of a sequence of symbolic bits and can be used
 --   for symbolic machine-word arithmetic.  Bits are stored in
