diff --git a/Control/Monad/Perm/Internal.hs b/Control/Monad/Perm/Internal.hs
--- a/Control/Monad/Perm/Internal.hs
+++ b/Control/Monad/Perm/Internal.hs
@@ -39,9 +39,20 @@
 import Control.Monad.Trans.Class (MonadTrans (lift))
 
 import Data.Foldable (foldr)
-import Data.Monoid ((<>), mempty)
+import Data.Monoid (mempty)
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 704
+import Data.Monoid ((<>))
+#else
+import Data.Monoid (Monoid, mappend)
+#endif
 
 import Prelude (Maybe (..), ($), (.), const, flip, fst, id, map, maybe)
+
+#if !defined(__GLASGOW_HASKELL__) || __GLASGOW_HASKELL__ < 704
+(<>) :: Monoid m => m -> m -> m
+(<>) = mappend
+{-# INLINE (<>) #-}
+#endif
 
 -- | The permutation applicative
 type Perm = PermT' Applicative
diff --git a/perm.cabal b/perm.cabal
--- a/perm.cabal
+++ b/perm.cabal
@@ -1,13 +1,12 @@
 name:          perm
-version:       0.1.0.0
+version:       0.1.0.1
 cabal-version: >= 1.10
 synopsis:      permutation Applicative and Monad with many mtl instances
 description:
   Based on \"Parsing Permutation Phrases\", by Arthur Baars, Andres Loeh and S.
   Doaitse Swierstra, /Haskell Workshop 2001/.  The implementation given here
   does not include explicit optional actions, and instead implements
-  'Control.Applicative.Alternative' and 'Control.Monad.MonadPlus'.
-  @m 'Control.Applicative.<|>' 'Control.Applicative.pure' a@ should be used where
+  'Alternative' and 'MonadPlus'.  @m '<|>' 'pure' a@ should be used where
   @'addOpt' a m@ would be used.
 license:       BSD3
 license-file:  LICENSE
@@ -42,6 +41,7 @@
   if impl(ghc >= 7.2)
     cpp-options: -DLANGUAGE_DefaultSignatures
   other-extensions:
+    CPP
     FlexibleInstances
     GADTs
     MultiParamTypeClasses
