diff --git a/constrictor.cabal b/constrictor.cabal
--- a/constrictor.cabal
+++ b/constrictor.cabal
@@ -1,7 +1,7 @@
 name:
   constrictor
 version:
-  0.1.1.2
+  0.1.2.0
 synopsis:
   strict versions of many things in base
 description:
@@ -27,6 +27,13 @@
   ChangeLog.md
 cabal-version:
   >=1.10
+tested-with:
+    GHC == 7.4.2
+  , GHC == 7.8.4
+  , GHC == 7.10.3
+  , GHC == 8.0.2
+  , GHC == 8.2.2
+  , GHC == 8.4.2
 
 source-repository head
     type:                git
@@ -44,3 +51,5 @@
     , transformers 
   default-language:
     Haskell2010
+  ghc-options:
+    -Wall -O2
diff --git a/src/Constrictor.hs b/src/Constrictor.hs
--- a/src/Constrictor.hs
+++ b/src/Constrictor.hs
@@ -21,7 +21,7 @@
 
 module Constrictor
   ( 
-    -- * Strict 'lift-like' functions 
+    -- * Strict lifting functions 
     (<$!>)
   , fmap'
   , liftM'
@@ -47,59 +47,19 @@
    -- ** Strict monadic folds
   , foldlMapM'
   , foldrMapM'
-    -- * Types
-    -- ** Wrapped applicative functor
-  , Ap(..)
   ) where
 
 import Prelude hiding (foldr,foldl)
 
-import Control.Applicative (Alternative, Applicative(..), liftA2)
-import Control.Monad (MonadPlus, ap, liftM, liftM2)
-#if MIN_VERSION_base(4,9,0)
-import Control.Monad.Fail (MonadFail)
-#endif
-import Control.Monad.Fix  (MonadFix)
+import Control.Applicative (Applicative(..), liftA2)
+import Control.Monad (ap, liftM)
 import Control.Monad.Trans.Cont (ContT(..), cont)
 import Data.Foldable
 import Data.Functor.Compose (Compose(..))
 import Data.Functor.Identity (runIdentity)
-import Data.Monoid hiding ((<>))
-#if MIN_VERSION_base(4,9,0)
-import Data.Semigroup
-#endif
+import Data.Monoid (Monoid(mappend,mempty))
 import Data.Traversable (traverse,Traversable)
-import GHC.Generics (Generic,Generic1)
 
--- | A wrapped applicative functor.
---   Please note that base 4.12.0.0 will include this type,
---   and it will be removed from this library at that point.
-newtype Ap f a = Ap { getAp :: f a }
-  deriving ( Alternative, Applicative
-           , Enum, Eq, Foldable, Functor
-           , Generic
-#if MIN_VERSION_base(4,6,0)
-           , Generic1
-#endif
-           , Monad
-#if MIN_VERSION_base(4,9,0)
-           , MonadFail
-#endif
-           , MonadFix, MonadPlus
-           , Num, Ord, Read, Show, Traversable
-           )
-
-#if MIN_VERSION_base(4,9,0)
-instance (Applicative f, Semigroup a) => Semigroup (Ap f a) where
-  (Ap x) <> (Ap y) = Ap $ liftA2 (<>) x y
-#endif
-
-instance (Applicative f, Monoid a) => Monoid (Ap f a) where
-  mempty = Ap $ pure mempty
-#if !(MIN_VERSION_base(4,11,0))
-  mappend (Ap x) (Ap y) = Ap $ liftA2 (mappend) x y
-#endif
-
 -- | Lazy in the monoidal accumulator. Monoidal accumulation
 --   happens from left to right.
 foldlMapA :: forall t b a f. (Foldable t, Monoid b, Applicative f) => (a -> f b) -> t a -> f b
@@ -122,8 +82,8 @@
     !br <- f x
     k $! (mappend bl br) 
 
--- Strict in the monoidal accumulator. 
--- Monoidal accumulation happens from left to right.
+-- | Strict in the monoidal accumulator. 
+--   Monoidal accumulation happens from left to right.
 foldrMapM' :: forall t b a m. (Foldable t, Monoid b, Monad m) => (a -> m b) -> t a -> m b
 foldrMapM' f xs = foldl f' return xs mempty
   where
@@ -138,16 +98,16 @@
 -- argument and result.
 --
 -- This is re-defined in this module, and not
--- just re-exported from @'Control.Monad'@.
+-- just re-exported from /Control.Monad/.
 -- The reason for this is that there is no way
 -- to hide the docs for re-exports with Haddocks.
 --
 -- In the common case that one might import
--- @'Control.Monad'@, we recommend structuring
+-- /Control.Monad/, we recommend structuring
 -- imports like so:
 --
 -- @
--- import Control.Monad hiding ((<$!>))
+-- import Control.Monad hiding ((\<\$!>))
 -- import Constrictor
 -- @
 --
@@ -155,12 +115,11 @@
 --
 -- @
 -- import Control.Monad
--- import Constrictor hiding ((<$!>))
+-- import Constrictor hiding ((\<$!>))
 -- @
 --
--- There should be no side effects (i.e.
--- naming/scoping conflicts) introduced as a
--- result of structuring one's imports in this way.
+-- There should be no unintended side effects
+-- introduced as a result of structuring one's imports in this way.
 (<$!>) :: Monad m => (a -> b) -> m a -> m b
 {-# INLINE (<$!>) #-}
 f <$!> m = do
