diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,1 +1,55 @@
-language: haskell
+# NB: don't set `language: haskell` here
+
+# The following enables several GHC versions to be tested; often it's enough to test only against the last release in a major GHC version. Feel free to omit lines listings versions you don't need/want testing for.
+env:
+# - GHCVER=6.12.3
+# - GHCVER=7.0.1
+# - GHCVER=7.0.2
+# - GHCVER=7.0.3
+# - GHCVER=7.0.4
+# - GHCVER=7.2.1
+# - GHCVER=7.2.2
+# - GHCVER=7.4.1
+# - GHCVER=7.4.2
+# - GHCVER=7.6.1
+# - GHCVER=7.6.2
+ - GHCVER=7.6.3
+# - GHCVER=7.8.1 # see note about Alex/Happy
+ - GHCVER=7.8.2 # see note about Alex/Happy
+# - GHCVER=head  # see section about GHC HEAD snapshots
+
+# Note: the distinction between `before_install` and `install` is not important.
+before_install:
+ - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
+ - travis_retry sudo apt-get update
+ - travis_retry sudo apt-get install cabal-install-1.18 ghc-$GHCVER # see note about happy/alex
+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.18/bin:$PATH
+ - |
+   if [ $GHCVER = "head" ] || [ ${GHCVER%.*} = "7.8" ]; then
+     travis_retry sudo apt-get install happy-1.19.3 alex-3.1.3
+     export PATH=/opt/alex/3.1.3/bin:/opt/happy/1.19.3/bin:$PATH
+   else
+     travis_retry sudo apt-get install happy alex
+   fi
+
+install:
+ - cabal update
+ - cabal install --only-dependencies --enable-tests -v2  # -v2 provides useful information for debugging
+
+# Here starts the actual work to be performed for the package under test; any command which exits with a non-zero exit code causes the build to fail.
+script:
+ - cabal configure --enable-tests -v2  # -v2 provides useful information for debugging
+ - cabal build   # this builds all libraries and executables (including tests/benchmarks)
+ - cabal test
+ - cabal check
+ - cabal sdist   # tests that a source-distribution can be generated
+
+# The following scriptlet checks that the resulting source distribution can be built & installed
+ - export SRC_TGZ=$(cabal-1.18 info . | awk '{print $2 ".tar.gz";exit}') ;
+   cd dist/;
+   if [ -f "$SRC_TGZ" ]; then
+      cabal install "$SRC_TGZ";
+   else
+      echo "expected '$SRC_TGZ' not found";
+      exit 1;
+   fi
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.markdown
@@ -0,0 +1,8 @@
+0.4.0
+-----
+* remove dependency on `algebra` package, since it is outdated and not compatible with recent version of other packages
+
+0.3.0
+-----
+* avoid dependency issue of comonad-4.* and representable-functors-3.2.0.1
+
diff --git a/sign.cabal b/sign.cabal
--- a/sign.cabal
+++ b/sign.cabal
@@ -1,5 +1,5 @@
 Name:		sign
-Version:	0.3.0
+Version:	0.4.0
 License:	BSD3
 License-File:	LICENSE
 Author:		Masahiro Sakai (masahiro.sakai@gmail.com)
@@ -9,14 +9,11 @@
 Synopsis:	Arithmetic over signs and sets of signs
 Description:
    Arithmetic over signs (i.e. -, 0, +) and sets of signs
-   .
-   Changes in 0.3.0
-   .
-   * avoid dependency issue of comonad-4.* and representable-functors-3.2.0.1
 Bug-Reports:	https://github.com/msakai/sign/issues
 Extra-Source-Files:
    README.md
    LICENSE
+   CHANGELOG.markdown
    .travis.yml
 Build-Type: Simple
 
@@ -27,9 +24,7 @@
 Library
   Hs-source-dirs: src
   Build-Depends:
-     base >=4 && <5, containers >= 0.4.2, deepseq, hashable >=1.1.2.5 && <1.3.0.0, lattices >=1.2.1.1, algebra,
-     -- XXX: This is a hack to avoid combining comonad-4.* and representable-functors-3.2.0.1 when compiling algebra package.
-     representable-functors >=3.2.0.2
+     base >=4 && <5, containers >= 0.4.2, deepseq, hashable >=1.1.2.5 && <1.3.0.0, lattices >=1.2.1.1
   Default-Language: Haskell2010
   Other-Extensions:
      FlexibleInstances
diff --git a/src/Data/Sign.hs b/src/Data/Sign.hs
--- a/src/Data/Sign.hs
+++ b/src/Data/Sign.hs
@@ -43,7 +43,6 @@
 import qualified Data.Set as Set
 import Data.Typeable
 import Data.Data
-import qualified Numeric.Algebra as Alg
 
 -- | Signs of real numbers.
 data Sign
@@ -59,22 +58,6 @@
 instance Enumerable Sign where
   universe = universeBounded
 
-instance Alg.Multiplicative Sign where
-  (*)   = mult
-  pow1p s n = pow s (1+n)
-
-instance Alg.Commutative Sign
-
-instance Alg.Unital Sign where
-  one = Pos
-  pow = pow
-
-instance Alg.Division Sign where
-  recip = recip
-  (/)   = div
-  (\\)  = flip div
-  (^)   = pow
-
 -- | Unary negation.
 negate :: Sign -> Sign
 negate Neg  = Pos
@@ -164,28 +147,6 @@
 instance Fractional (Set Sign) where
   recip        = Set.map recip
   fromRational = Set.singleton . signOf
-
-instance Alg.Multiplicative (Set Sign) where
-  (*) = (*)
-  pow1p s n = Alg.pow s (1+n)
-
-instance Alg.Commutative (Set Sign)
-
-instance Alg.Unital (Set Sign) where
-  one = Set.singleton Pos
-  pow = (Alg.^)
-
-instance Alg.Division (Set Sign) where
-  recip  = P.recip
-  (/)    = (/)
-  (\\)   = flip (/)
-  ss ^ n = Set.map (\s -> pow s n) ss
-
-instance Alg.Additive (Set Sign) where
-  (+)           = (+)
-  sinnum1p _ ss = ss
-
-instance Alg.Abelian (Set Sign)
 
 #if !MIN_VERSION_hashable(1,2,0)
 -- Copied from hashable-1.2.0.7:
