diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-04-27  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* src/Algebra/AbelianGroup/Main.hs (AnsErr): Added Functor and
+	Applicative instance so that the code compiles with GHC 7.10.
+	Thanks go to Douglas McClean.
+
+	* cmu.cabal (Version): Released as version 1.10
+
 2013-02-21  John D. Ramsdell  <ramsdell@mitre.org>
 
 	* cmu.cabal (Location): Added repository location.
diff --git a/cmu.cabal b/cmu.cabal
--- a/cmu.cabal
+++ b/cmu.cabal
@@ -1,5 +1,5 @@
 Name:			cmu
-Version:		1.9
+Version:		1.10
 Maintainer:		ramsdell@mitre.org
 Cabal-Version:		>= 1.6
 License:		GPL
diff --git a/src/Algebra/CommutativeMonoid/Main.hs b/src/Algebra/CommutativeMonoid/Main.hs
--- a/src/Algebra/CommutativeMonoid/Main.hs
+++ b/src/Algebra/CommutativeMonoid/Main.hs
@@ -17,6 +17,7 @@
 
 module Main (main, test) where
 
+import Control.Applicative
 import System.IO (isEOF, hFlush, stdout)
 import Algebra.CommutativeMonoid.Unification
 
@@ -43,15 +44,25 @@
       [] -> fail "no parse"
       _ -> fail "ambiguous parse"
 
+-- Like Either String but with fail method defined
 data AnsErr a
     = Ans a
     | Err String
 
+instance Functor (AnsErr) where
+    fmap _ (Err x) = Err x
+    fmap f (Ans y) = Ans (f y)
+
+instance Applicative (AnsErr) where
+    pure          = Ans
+    Err e <*> _ = Err e
+    Ans f <*> r = fmap f r
+
 instance Monad AnsErr where
     (Ans x) >>= k = k x
     (Err s) >>= _ = Err s
     return        = Ans
-    fail          = Err
+    fail          = Err         -- fail is Err
 
 -- Main loop
 
