diff --git a/Data/List/NonEmpty.hs b/Data/List/NonEmpty.hs
--- a/Data/List/NonEmpty.hs
+++ b/Data/List/NonEmpty.hs
@@ -73,6 +73,7 @@
    , fromList    -- :: [a] -> NonEmpty a
    , toList      -- :: NonEmpty a -> [a]
    , nonEmpty    -- :: [a] -> Maybe (NonEmpty a)
+   , xor         -- :: NonEmpty a -> Bool
    ) where
 
 
@@ -111,6 +112,11 @@
   , Data, Typeable
 #endif
   )
+
+xor :: NonEmpty Bool -> Bool
+xor (x :| xs)   = foldr xor' x xs
+  where xor' True y  = not y
+        xor' False y = y
 
 unfold :: (a -> (b, Maybe a)) -> a -> NonEmpty b
 unfold f a = case f a of
diff --git a/semigroups.cabal b/semigroups.cabal
--- a/semigroups.cabal
+++ b/semigroups.cabal
@@ -1,6 +1,6 @@
 name:          semigroups
 category:      Algebra, Data, Data Structures, Math
-version:       0.8.0.1
+version:       0.8.2
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
@@ -20,21 +20,24 @@
   type: git
   location: git://github.com/ekmett/semigroups.git
 
-flag DeriveDataTypeable
-  description: DeriveDataTypeable available
-  default: True
+flag base2
+  default: False
   manual: False
 
 library
-  build-depends:
-    base >= 4 && < 5,
-    containers >= 0.3 && < 0.5
+  if !impl(hugs)
+    extensions: DeriveDataTypeable
+    cpp-options: -DLANGUAGE_DeriveDataTypeable
 
+  if flag(base2)
+    build-depends: base == 2.*
+  else
+    build-depends:
+      base >= 3 && < 5,
+      containers >= 0.3 && < 0.5
+
   ghc-options: -Wall
   extensions: CPP
-  if flag(DeriveDataTypeable)
-    extensions: DeriveDataTypeable
-    cpp-options: -DLANGUAGE_DeriveDataTypeable
 
   exposed-modules:
     Data.Semigroup
