diff --git a/cbits/combinatorics.c b/cbits/combinatorics.c
--- a/cbits/combinatorics.c
+++ b/cbits/combinatorics.c
@@ -1,7 +1,7 @@
 /*
 **
 ** The C code is generated by [ATS/Postiats-0-3-8]
-** The starting compilation time is: 2018-1-27: 21h:42m
+** The starting compilation time is: 2018-1-28:  7h:35m
 **
 */
 
diff --git a/cbits/number-theory.c b/cbits/number-theory.c
--- a/cbits/number-theory.c
+++ b/cbits/number-theory.c
@@ -1,7 +1,7 @@
 /*
 **
 ** The C code is generated by [ATS/Postiats-0-3-8]
-** The starting compilation time is: 2018-1-27: 21h:42m
+** The starting compilation time is: 2018-1-28:  7h:35m
 **
 */
 
diff --git a/cbits/numerics.c b/cbits/numerics.c
--- a/cbits/numerics.c
+++ b/cbits/numerics.c
@@ -1,7 +1,7 @@
 /*
 **
 ** The C code is generated by [ATS/Postiats-0-3-8]
-** The starting compilation time is: 2018-1-27: 21h:42m
+** The starting compilation time is: 2018-1-28:  7h:35m
 **
 */
 
diff --git a/fast-arithmetic.cabal b/fast-arithmetic.cabal
--- a/fast-arithmetic.cabal
+++ b/fast-arithmetic.cabal
@@ -1,5 +1,5 @@
 name:                fast-arithmetic
-version:             0.3.2.1
+version:             0.3.2.4
 synopsis:            Fast functions on integers.
 description:         Fast functions for number theory and combinatorics with a high level of safety guaranteed by [ATS](http://www.ats-lang.org/). This package also provides a
                      'Storable' instance for GMP's @mpz@ type.
@@ -28,7 +28,7 @@
 custom-setup
   -- ghc-options:     -threaded -rtsopts -with-rtsopts=-N
   setup-depends:   base
-                 , ats-setup
+                 , ats-setup >= 0.1.0.2
                  , Cabal
 
 library
@@ -46,13 +46,12 @@
                      , Numeric.Combinatorics
                      , Data.GMP
   other-modules:       Numeric.Common
-  build-depends:       base >= 4.8 && < 5
+  build-depends:       base >= 4.10 && < 5
                      , composition-prelude
                      , recursion-schemes
   default-language:    Haskell2010
   if flag(development)
-    if impl(ghc >= 8.0)
-      ghc-options:       -Werror
+    ghc-options:       -Werror
   if impl(ghc >= 8.0)
     ghc-options:       -Wincomplete-uni-patterns -Wincomplete-record-updates -Wcompat
   ghc-options:         -Wall -optc-mtune=native -optc-flto -optc-O3
diff --git a/src/Data/GMP.hs b/src/Data/GMP.hs
--- a/src/Data/GMP.hs
+++ b/src/Data/GMP.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module      : Data.GMP
 Copyright   : Copyright (c) 2017 Vanessa McHale
@@ -14,9 +12,6 @@
                 , conjugateGMP
                 ) where
 
-#if __GLASGOW_HASKELL__ <= 784
-import           Control.Applicative
-#endif
 import           Control.Monad         ((<=<))
 import           Data.Functor.Foldable
 import           Data.Word
diff --git a/src/Numeric/Common.hs b/src/Numeric/Common.hs
--- a/src/Numeric/Common.hs
+++ b/src/Numeric/Common.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 module Numeric.Common ( conjugate
                       , asTest
                       ) where
@@ -7,21 +5,13 @@
 import           Data.Word
 import           Foreign.C
 
-#if __GLASGOW_HASKELL__ >= 820
 asTest :: Integral a => (CInt -> CBool) -> a -> Bool
-#else
-asTest :: Integral a => (CInt -> CUChar) -> a -> Bool
-#endif
 asTest f = convertBool . f . fromIntegral
 
 conjugate :: (Integral a, Integral b) => (CInt -> CInt) -> a -> b
 conjugate f = fromIntegral . f . fromIntegral
 
-#if __GLASGOW_HASKELL__ >= 820
 convertBool :: CBool -> Bool
-#else
-convertBool :: CUChar -> Bool
-#endif
 convertBool = go . fromIntegral
     where
         go :: Word8 -> Bool
diff --git a/src/Numeric/Integer.hs b/src/Numeric/Integer.hs
--- a/src/Numeric/Integer.hs
+++ b/src/Numeric/Integer.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module      : Numeric.Combinatorics
 Copyright   : Copyright (c) 2017 Vanessa McHale
@@ -16,11 +14,7 @@
 import           Foreign.Ptr
 import           Numeric.Common
 
-#if __GLASGOW_HASKELL__ >= 820
 foreign import ccall unsafe is_prime_ats :: CInt -> CBool
-#else
-foreign import ccall unsafe is_prime_ats :: CInt -> CUChar
-#endif
 foreign import ccall unsafe fib_ats :: CInt -> Ptr GMPInt
 
 -- | Indexed starting at @0@.
diff --git a/src/Numeric/NumberTheory.hs b/src/Numeric/NumberTheory.hs
--- a/src/Numeric/NumberTheory.hs
+++ b/src/Numeric/NumberTheory.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 {-|
 Module      : Numeric.NumberTheory
 Copyright   : Copyright (c) 2017 Vanessa McHale
@@ -21,11 +19,7 @@
 foreign import ccall unsafe count_divisors_ats :: CInt -> CInt
 foreign import ccall unsafe sum_divisors_ats :: CInt -> CInt
 foreign import ccall unsafe little_omega_ats :: CInt -> CInt
-#if __GLASGOW_HASKELL__ >= 820
 foreign import ccall unsafe is_perfect_ats :: CInt -> CBool
-#else
-foreign import ccall unsafe is_perfect_ats :: CInt -> CUChar
-#endif
 
 -- | See [here](http://mathworld.wolfram.com/PerfectNumber.html)
 isPerfect :: Int -> Bool
diff --git a/src/Numeric/Pure.hs b/src/Numeric/Pure.hs
--- a/src/Numeric/Pure.hs
+++ b/src/Numeric/Pure.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 -- | Pure Haskell functions. These tend to be more general than the equivalents
 -- in ATS.
 module Numeric.Pure ( -- * Useful functions
@@ -8,10 +6,6 @@
                     , hsIsPrime
                     , hsFibonacci
                     ) where
-
-#if __GLASGOW_HASKELL__ <= 784
-import           Control.Applicative
-#endif
 
 {-# SPECIALIZE hsIsPrime :: Int -> Bool #-}
 
