diff --git a/HTTP.cabal b/HTTP.cabal
--- a/HTTP.cabal
+++ b/HTTP.cabal
@@ -1,5 +1,5 @@
 Name: HTTP
-Version: 4000.0.9
+Version: 4000.0.10
 Cabal-Version: >= 1.2
 Build-type: Simple
 License: BSD3
@@ -80,7 +80,7 @@
                  Network.HTTP.MD5Aux,
                  Network.HTTP.Utils
   GHC-options: -fwarn-missing-signatures -Wall
-  Build-depends: base >= 2 && < 4, network, parsec, mtl
+  Build-depends: base >= 2 && < 4.4, network, parsec, mtl
   if flag(old-base)
     Build-depends: base < 3
   else
diff --git a/Network/Stream.hs b/Network/Stream.hs
--- a/Network/Stream.hs
+++ b/Network/Stream.hs
@@ -29,6 +29,7 @@
 
    , failParse -- :: String -> Result a
    , failWith  -- :: ConnError -> Result a
+   , failMisc  -- :: String -> Result a
    ) where
 
 import Control.Monad.Error
@@ -43,6 +44,12 @@
 instance Error ConnError where
   noMsg = strMsg "unknown error"
   strMsg x = ErrorMisc x
+
+-- in GHC 7.0 the Monad instance for Error no longer
+-- uses fail x = Left (strMsg x). failMisc is therefore
+-- used instead.
+failMisc :: String -> Result a
+failMisc x = failWith (strMsg x)
 
 failParse :: String -> Result a
 failParse x = failWith (ErrorParse x)
diff --git a/Network/TCP.hs b/Network/TCP.hs
--- a/Network/TCP.hs
+++ b/Network/TCP.hs
@@ -47,6 +47,7 @@
    ( ConnError(..)
    , Result
    , failWith
+   , failMisc
    )
 import Network.BufferType
 
@@ -350,12 +351,12 @@
 			then do
 			  when (connCloseEOF conn) $ catch (close ref) (\ _ -> return ())
 			  return (return (buf_empty (connBuffer conn)))
-			else return (fail (show e)))
+			else return (failMisc (show e)))
 
 bufferPutBlock :: BufferOp a -> Handle -> a -> IO (Result ())
 bufferPutBlock ops h b = 
   Prelude.catch (buf_hPut ops h b >> hFlush h >> return (return ()))
-                (\ e -> return (fail (show e)))
+                (\ e -> return (failMisc (show e)))
 
 bufferReadLine :: HStream a => HandleStream a -> IO (Result a)
 bufferReadLine ref = onNonClosedDo ref $ \ conn -> do
@@ -373,7 +374,7 @@
                   then do
 	  	    when (connCloseEOF conn) $ catch (close ref) (\ _ -> return ())
 		    return (return   (buf_empty (connBuffer conn)))
-                  else return (fail (show e)))
+                  else return (failMisc (show e)))
  where
    -- yes, this s**ks.. _may_ have to be addressed if perf
    -- suggests worthiness.
