diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-15  John D. Ramsdell  <ramsdell@mitre.org>
+
+	* cmu.cabal (Version): Released as version 1.12
+
+	* src/Algebra/CommutativeMonoid/Main.hs (AnsErr): Updated code
+	to support the MonadFail proposal as implemented in base-4.13.0.0.
+
 2018-01-06  John D. Ramsdell  <ramsdell@mitre.org>
 
 	* src/Algebra/CommutativeMonad/Main.hs (readM): Adapted the code
diff --git a/cmu.cabal b/cmu.cabal
--- a/cmu.cabal
+++ b/cmu.cabal
@@ -1,38 +1,38 @@
-Name:			cmu
-Version:		1.11
-Maintainer:		ramsdell@mitre.org
-Cabal-Version:		>= 1.6
-License:		GPL
-License-File:		license.txt
-Synopsis:		Unification in a Commutative Monoid
+Name:                   cmu
+Version:                1.12
+Maintainer:             ramsdell@mitre.org
+Cabal-Version:          >= 1.6
+License:                GPL
+License-File:           license.txt
+Synopsis:               Unification in a Commutative Monoid
 Description:            The unification problem is given the problem
-			statement t =? t\', find a most general
-			substitution s such that s(t) = s(t\') modulo
-			the axioms of a commutative monoid.
-			Substitition s is more general than s\' if
-			there is a substitition s\" such that s\' =
-			s\" o s.
-Category:		Algebra
-Build-Type:		Simple
-Extra-Source-Files:	readme.txt ChangeLog Makefile
+                        statement t =? t\', find a most general
+                        substitution s such that s(t) = s(t\') modulo
+                        the axioms of a commutative monoid.
+                        Substitition s is more general than s\' if
+                        there is a substitition s\" such that s\' =
+                        s\" o s.
+Category:               Algebra
+Build-Type:             Simple
+Extra-Source-Files:     readme.txt ChangeLog Makefile
 
 Library
-  Build-Depends:	base >= 3 && < 5, containers >= 0.3, array
-  Exposed-Modules:	Algebra.CommutativeMonoid.Unification
+  Build-Depends:        base >= 4.13 && < 5, containers >= 0.3, array
+  Exposed-Modules:      Algebra.CommutativeMonoid.Unification
                         Algebra.CommutativeMonoid.LinDiophEq
-  Hs-Source-Dirs:	src
+  Hs-Source-Dirs:       src
   GHC-Options:
     -Wall -fno-warn-name-shadowing -fwarn-unused-imports
 
 Executable cmu
-  Main-Is:		Algebra/CommutativeMonoid/Main.hs
-  Build-Depends:	base >= 3 && < 5, containers >= 0.3, array
-  Other-Modules:	Algebra.CommutativeMonoid.Unification
+  Main-Is:              Algebra/CommutativeMonoid/Main.hs
+  Build-Depends:        base >= 4.13 && < 5, containers >= 0.3, array
+  Other-Modules:        Algebra.CommutativeMonoid.Unification
                         Algebra.CommutativeMonoid.LinDiophEq
-  Hs-Source-Dirs:	src
+  Hs-Source-Dirs:       src
   GHC-Options:
     -Wall -fno-warn-name-shadowing -fwarn-unused-imports
 
 Source-Repository head
-  Type:			git
-  Location:		git://github.com/ramsdell/cmu.git
+  Type:                 git
+  Location:             git://github.com/ramsdell/cmu.git
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,7 +17,6 @@
 
 module Main (main, test) where
 
-import qualified Control.Monad.Fail as Fail
 import System.IO (isEOF, hFlush, stdout)
 import Algebra.CommutativeMonoid.Unification
 
@@ -37,12 +36,12 @@
             print subst
             putStrLn ""
 
-readM :: (Read a, Fail.MonadFail m) => String -> m a
+readM :: (Read a, MonadFail m) => String -> m a
 readM s =
     case [ x | (x, t) <- reads s, ("", "") <- lex t ] of
       [x] -> return x
-      [] -> Fail.fail "no parse"
-      _ -> Fail.fail "ambiguous parse"
+      [] -> fail "no parse"
+      _ -> fail "ambiguous parse"
 
 -- Like Either String but with fail method defined
 data AnsErr a
@@ -63,7 +62,7 @@
     (Err s) >>= _ = Err s
     return        = Ans
 
-instance Fail.MonadFail AnsErr where
+instance MonadFail AnsErr where
     fail          = Err         -- fail is Err
 
 -- Main loop
