diff --git a/cbits/StringTable_cbits.c b/cbits/StringTable_cbits.c
--- a/cbits/StringTable_cbits.c
+++ b/cbits/StringTable_cbits.c
@@ -157,7 +157,7 @@
                 if(ATOM_VALID(a)) {
                         fprintf(file,"%u:",ATOM_LEN(a));
                         print_quoted(file, ATOM_PTR(a),ATOM_LEN(a));
-                        fwrite("\n",1,1,file);
+                        if (fwrite("\n",1,1,file)) return;
                 }
         }
 }
@@ -168,8 +168,8 @@
                 atom_t a = htable[i].atom;
                 if(ATOM_VALID(a)) {
                         printf("%p %u: ",ATOM_PTR(a),ATOM_LEN(a));
-                        fwrite(ATOM_PTR(a),1,ATOM_LEN(a),stdout);
-                        fwrite("\n",1,1,stdout);
+                        if (fwrite(ATOM_PTR(a),1,ATOM_LEN(a),stdout)) return;
+                        if (fwrite("\n",1,1,stdout)) return;
                 }
         }
 }
diff --git a/src/StringTable/AtomMap.hs b/src/StringTable/AtomMap.hs
--- a/src/StringTable/AtomMap.hs
+++ b/src/StringTable/AtomMap.hs
@@ -263,9 +263,13 @@
 mapEitherWithKey :: (Key -> a -> Either b c) -> AtomMap a -> (AtomMap b, AtomMap c)
 mapEitherWithKey x y = (\(x, y) -> (MkAtomMap x, MkAtomMap y)) (IM.mapEitherWithKey ((. unsafeIntToAtom) x) (fromAtomMap y))
 maxViewWithKey :: (Monad m) => AtomMap a -> m ((Key, a), AtomMap a)
-maxViewWithKey x = liftM (\((x, y), z) -> ((unsafeIntToAtom x, y), MkAtomMap z)) (IM.maxViewWithKey (fromAtomMap x))
+maxViewWithKey x = case IM.maxViewWithKey (fromAtomMap x) of
+    Just ((x, y), z) -> return ((unsafeIntToAtom x, y), MkAtomMap z) 
+    _ -> fail "No maxViewWithKey"
 minViewWithKey :: (Monad m) => AtomMap a -> m ((Key, a), AtomMap a)
-minViewWithKey x = liftM (\((x, y), z) -> ((unsafeIntToAtom x, y), MkAtomMap z)) (IM.minViewWithKey (fromAtomMap x))
+minViewWithKey x = case IM.minViewWithKey (fromAtomMap x) of
+    Just ((x, y), z) -> return ((unsafeIntToAtom x, y), MkAtomMap z) 
+    _ -> fail "No minViewWithKey"
 notMember :: Key -> AtomMap a -> Bool
 notMember x y =  (IM.notMember (fromAtom x) (fromAtomMap y))
 partition :: (a -> Bool) -> AtomMap a -> (AtomMap a,AtomMap a)
@@ -305,9 +309,13 @@
 alter :: (Maybe a -> Maybe a) -> Key -> AtomMap a -> AtomMap a
 alter x y z = MkAtomMap (IM.alter ( x) (fromAtom y) (fromAtomMap z))
 maxView :: (Monad m) => AtomMap a -> m (a, AtomMap a)
-maxView x = liftM (\(x, y) -> (x, MkAtomMap y)) (IM.maxView (fromAtomMap x))
+maxView x = case IM.maxView (fromAtomMap x) of
+    Just (x, y) -> return (x, MkAtomMap y)
+    _ -> fail "No maxView"
 minView :: (Monad m) => AtomMap a -> m (a, AtomMap a)
-minView x = liftM (\(x, y) -> (x, MkAtomMap y)) (IM.minView (fromAtomMap x))
+minView x = case IM.minView (fromAtomMap x) of
+    Just (x, y) -> return (x, MkAtomMap y)
+    _ -> fail "No minView"
 findMax :: AtomMap a -> a
 findMax x =  (IM.findMax (fromAtomMap x))
 findMin :: AtomMap a -> a
diff --git a/src/StringTable/AtomSet.hs b/src/StringTable/AtomSet.hs
--- a/src/StringTable/AtomSet.hs
+++ b/src/StringTable/AtomSet.hs
@@ -119,9 +119,13 @@
 deleteFindMax :: AtomSet -> (Atom, AtomSet)
 deleteFindMax x = (\(x, y) -> (unsafeIntToAtom x, MkAtomSet y)) (IS.deleteFindMax (fromAtomSet x))
 maxView :: (Monad m) => AtomSet -> m (Atom, AtomSet)
-maxView x = liftM (\(x, y) -> (unsafeIntToAtom x, MkAtomSet y)) (IS.maxView (fromAtomSet x))
+maxView x = case IS.maxView (fromAtomSet x) of
+    Just (x, y) -> return (unsafeIntToAtom x, MkAtomSet y)
+    _ -> fail "No maxView"
 minView :: (Monad m) => AtomSet -> m (Atom, AtomSet)
-minView x = liftM (\(x, y) -> (unsafeIntToAtom x, MkAtomSet y)) (IS.minView (fromAtomSet x))
+minView x = case IS.minView (fromAtomSet x) of
+    Just (x, y) -> return (unsafeIntToAtom x, MkAtomSet y)
+    _ -> fail "No minView"
 map :: (Atom->Atom) -> AtomSet -> AtomSet
 map x y = MkAtomSet (IS.map ((\f -> fromAtom . f . unsafeIntToAtom) x) (fromAtomSet y))
 fold :: (Atom -> b -> b) -> b -> AtomSet -> b
diff --git a/stringtable-atom.cabal b/stringtable-atom.cabal
--- a/stringtable-atom.cabal
+++ b/stringtable-atom.cabal
@@ -1,5 +1,5 @@
 Name:                stringtable-atom
-Version:             0.0.4
+Version:             0.0.5
 Category:            Data, Pugs
 Synopsis:            Memoize Strings as Atoms for fast comparison and sorting, with maps and sets
 Description:         Memoize Strings as Atoms for fast comparison and sorting, with maps and sets
@@ -10,9 +10,9 @@
 Copyright:           John Meacham 2008, Audrey Tang 2008
 Exposed-modules:     StringTable.Atom StringTable.AtomMap StringTable.AtomSet
 
-Build-Depends:       base, bytestring>=0.9.0.1, binary, containers
+Build-Depends:       base<4, bytestring>=0.9.0.1, binary, containers
 Build-Type:          Simple
-Tested-With:         GHC==6.8.2, GHC==6.8.3
+Tested-With:         GHC==6.8.2, GHC==6.8.3, GHC==6.10.1
 
 extensions:          ForeignFunctionInterface, TypeSynonymInstances,
                      DeriveDataTypeable, FlexibleInstances,
