diff --git a/Network/Wai/Handler/Warp.hs b/Network/Wai/Handler/Warp.hs
--- a/Network/Wai/Handler/Warp.hs
+++ b/Network/Wai/Handler/Warp.hs
@@ -97,7 +97,6 @@
 import Control.Exception (SomeException)
 import Network.Wai (Request, Response)
 import Network.Socket (SockAddr)
-import Data.ByteString (ByteString)
 import Data.Streaming.Network (HostPreference)
 
 -- | Port to listen on. Default value: 3000
diff --git a/Network/Wai/Handler/Warp/Conduit.hs b/Network/Wai/Handler/Warp/Conduit.hs
--- a/Network/Wai/Handler/Warp/Conduit.hs
+++ b/Network/Wai/Handler/Warp/Conduit.hs
@@ -1,12 +1,10 @@
 module Network.Wai.Handler.Warp.Conduit where
 
-import Control.Applicative
 import Control.Exception
 import Control.Monad (when, unless)
 import Data.ByteString (ByteString)
 import Data.ByteString.Lazy.Char8 (pack)
 import qualified Data.ByteString as S
-import qualified Data.ByteString.Char8 as S8
 import qualified Data.ByteString.Lazy as L
 import qualified Data.IORef as I
 import Data.Word (Word, Word8)
diff --git a/Network/Wai/Handler/Warp/ReadInt.hs b/Network/Wai/Handler/Warp/ReadInt.hs
--- a/Network/Wai/Handler/Warp/ReadInt.hs
+++ b/Network/Wai/Handler/Warp/ReadInt.hs
@@ -32,14 +32,14 @@
 -- use Int64 here and then make a generic 'readInt' that allows conversion to
 -- Int and Integer.
 
-{- NOINLINE readInt64MH #-}
+{-# NOINLINE readInt64 #-}
 readInt64 :: ByteString -> Int64
 readInt64 bs = S.foldl' (\ !i !c -> i * 10 + fromIntegral (mhDigitToInt c)) 0
              $ S.takeWhile isDigit bs
 
 data Table = Table !Addr#
 
-{- NOINLINE mhDigitToInt #-}
+{-# NOINLINE mhDigitToInt #-}
 mhDigitToInt :: Word8 -> Int
 mhDigitToInt (W8# i) = I# (word2Int# (indexWord8OffAddr# addr (word2Int# i)))
   where
diff --git a/Network/Wai/Handler/Warp/Request.hs b/Network/Wai/Handler/Warp/Request.hs
--- a/Network/Wai/Handler/Warp/Request.hs
+++ b/Network/Wai/Handler/Warp/Request.hs
@@ -8,7 +8,6 @@
   , headerLines
   ) where
 
-import Control.Applicative
 import qualified Control.Concurrent as Conc (yield)
 import Control.Exception (throwIO)
 import Data.Array ((!))
@@ -203,9 +202,9 @@
     -- No newline find in this chunk.  Add it to the prepend,
     -- update the length, and continue processing.
     push' Nothing = do
-        bs <- readSource' src
+        bst <- readSource' src
         when (S.null bs) $ throwIO IncompleteHeaders
-        push src status bs
+        push src status bst
       where
         len' = len + bsLen
         prepend' = S.append bs
@@ -233,9 +232,9 @@
                               in push src status bs''
                            else do
                              -- no more bytes in this chunk, ask for more
-                             bs <- readSource' src
+                             bst <- readSource' src
                              when (S.null bs) $ throwIO IncompleteHeaders
-                             push src status bs
+                             push src status bst
       where
         start = end + 1 -- start of next chunk
         line = SU.unsafeTake (checkCR bs end) bs
diff --git a/Network/Wai/Handler/Warp/RequestHeader.hs b/Network/Wai/Handler/Warp/RequestHeader.hs
--- a/Network/Wai/Handler/Warp/RequestHeader.hs
+++ b/Network/Wai/Handler/Warp/RequestHeader.hs
@@ -17,7 +17,6 @@
 import Foreign.Ptr (Ptr, plusPtr, minusPtr, nullPtr)
 import Foreign.Storable (peek)
 import qualified Network.HTTP.Types as H
-import qualified Network.HTTP.Types.URI as H
 import Network.Wai.Handler.Warp.Types
 import qualified Network.HTTP.Types.Header as HH
 -- $setup
diff --git a/Network/Wai/Handler/Warp/Response.hs b/Network/Wai/Handler/Warp/Response.hs
--- a/Network/Wai/Handler/Warp/Response.hs
+++ b/Network/Wai/Handler/Warp/Response.hs
@@ -17,7 +17,7 @@
 import Control.Exception
 import Data.Array ((!))
 import Data.ByteString (ByteString)
-import Data.Streaming.Blaze (newBlazeRecv, reuseBufferStrategy, allocBuffer)
+import Data.Streaming.Blaze (newBlazeRecv, reuseBufferStrategy)
 import qualified Data.ByteString as S
 import Control.Monad (unless, when)
 import qualified Data.ByteString.Char8 as B (pack)
diff --git a/Network/Wai/Handler/Warp/Settings.hs b/Network/Wai/Handler/Warp/Settings.hs
--- a/Network/Wai/Handler/Warp/Settings.hs
+++ b/Network/Wai/Handler/Warp/Settings.hs
@@ -5,7 +5,6 @@
 
 import Control.Exception
 import Control.Monad (when)
-import qualified Data.ByteString as S
 import qualified Data.Text as T
 import qualified Data.Text.IO as TIO
 import Data.Streaming.Network (HostPreference)
diff --git a/test/ExceptionSpec.hs b/test/ExceptionSpec.hs
--- a/test/ExceptionSpec.hs
+++ b/test/ExceptionSpec.hs
@@ -4,14 +4,12 @@
 
 import Control.Applicative
 import Control.Monad
-import Control.Concurrent (forkIO, threadDelay)
 import Network.HTTP
 import Network.Stream
 import Network.HTTP.Types hiding (Header)
 import Network.Wai hiding (Response)
 import Network.Wai.Internal (Request(..))
 import Network.Wai.Handler.Warp
-import System.IO.Unsafe (unsafePerformIO)
 import Test.Hspec
 import Control.Exception
 import qualified Data.Streaming.Network as N
@@ -25,9 +23,9 @@
 withTestServer inner = bracket
     (N.bindRandomPortTCP "*4")
     (sClose . snd)
-    $ \(port, lsocket) -> do
+    $ \(prt, lsocket) -> do
         withAsync (runSettingsSocket defaultSettings lsocket testApp)
-            $ \_ -> inner port
+            $ \_ -> inner prt
 
 testApp :: Application
 testApp (Network.Wai.Internal.Request {pathInfo = [x]}) f
@@ -49,20 +47,20 @@
 spec = describe "responds even if there is an exception" $ do
         {- Disabling these tests. We can consider forcing evaluation in Warp.
         it "statusError" $ do
-            sc <- rspCode <$> sendGET "http://localhost:2345/statusError"
+            sc <- rspCode <$> sendGET "http://127.0.0.1:2345/statusError"
             sc `shouldBe` (5,0,0)
         it "headersError" $ do
-            sc <- rspCode <$> sendGET "http://localhost:2345/headersError"
+            sc <- rspCode <$> sendGET "http://127.0.0.1:2345/headersError"
             sc `shouldBe` (5,0,0)
         it "headerError" $ do
-            sc <- rspCode <$> sendGET "http://localhost:2345/headerError"
+            sc <- rspCode <$> sendGET "http://127.0.0.1:2345/headerError"
             sc `shouldBe` (5,0,0)
         it "bodyError" $ do
-            sc <- rspCode <$> sendGET "http://localhost:2345/bodyError"
+            sc <- rspCode <$> sendGET "http://127.0.0.1:2345/bodyError"
             sc `shouldBe` (5,0,0)
         -}
-        it "ioException" $ withTestServer $ \port -> do
-            sc <- rspCode <$> sendGET (concat $ ["http://localhost:", show port, "/ioException"])
+        it "ioException" $ withTestServer $ \prt -> do
+            sc <- rspCode <$> sendGET (concat $ ["http://127.0.0.1:", show prt, "/ioException"])
             sc `shouldBe` (5,0,0)
 
 ----------------------------------------------------------------
diff --git a/test/RequestSpec.hs b/test/RequestSpec.hs
--- a/test/RequestSpec.hs
+++ b/test/RequestSpec.hs
@@ -11,7 +11,6 @@
 import Test.Hspec.QuickCheck
 import qualified Data.ByteString as S
 import qualified Data.ByteString.Char8 as S8
-import qualified Data.ByteString.Lazy as L
 import qualified Network.HTTP.Types.Header as HH
 import Data.IORef
 
@@ -66,11 +65,13 @@
     tooMany = headerLinesList $ repeat "f\n"
     tooLarge = headerLinesList $ repeat "f"
 
+headerLinesList :: [S8.ByteString] -> IO (S8.ByteString, [S8.ByteString])
 headerLinesList orig = do
     (res, src) <- headerLinesList' orig
     leftover <- readLeftoverSource src
     return (leftover, res)
 
+headerLinesList' :: [S8.ByteString] -> IO ([S8.ByteString], Source)
 headerLinesList' orig = do
     ref <- newIORef orig
     let src = do
@@ -84,6 +85,7 @@
     res <- headerLines src'
     return (res, src')
 
+consumeLen :: Int -> Source -> IO S8.ByteString
 consumeLen len0 src =
     loop id len0
   where
@@ -94,7 +96,7 @@
             if S.null bs
                 then loop front 0
                 else do
-                    let (x, y) = S.splitAt len bs
+                    let (x, _) = S.splitAt len bs
                     loop (front . (x:)) (len - S.length x)
 
 overLargeHeader :: Selector InvalidRequest
diff --git a/warp.cabal b/warp.cabal
--- a/warp.cabal
+++ b/warp.cabal
@@ -1,5 +1,5 @@
 Name:                warp
-Version:             3.0.0.3
+Version:             3.0.0.4
 Synopsis:            A fast, light-weight web server for WAI applications.
 License:             MIT
 License-file:        LICENSE
