diff --git a/Network/Web/HTTP.hs b/Network/Web/HTTP.hs
--- a/Network/Web/HTTP.hs
+++ b/Network/Web/HTTP.hs
@@ -23,9 +23,9 @@
 import Data.Char
 import qualified Data.Map as M
 import Data.Maybe
-import IO hiding (try)
 import Network.Web.Params
 import Network.Web.URI
+import System.IO
 import System.IO.Error hiding (try)
 import Text.Printf
 
diff --git a/Network/Web/Server.hs b/Network/Web/Server.hs
--- a/Network/Web/Server.hs
+++ b/Network/Web/Server.hs
@@ -3,15 +3,15 @@
 -}
 module Network.Web.Server (connection, WebServer, WebConfig(..)) where
 
-import Control.Exception
 import Control.Applicative
+import Control.Exception
 import qualified Data.ByteString.Char8 as S
 import Data.Maybe
 import Data.Time
-import IO
-import Network.Web.HTTP hiding (receive,respond)
-import qualified Network.Web.HTTP as HTTP (receive,respond)
 import Network.Web.Date
+import qualified Network.Web.HTTP as HTTP (receive,respond)
+import Network.Web.HTTP hiding (receive,respond)
+import System.IO
 import System.Timeout
 
 ----------------------------------------------------------------
@@ -73,11 +73,7 @@
 ----------------------------------------------------------------
 
 recvRequest :: Handle -> WebConfig -> IO (Maybe Request)
-recvRequest hdl cnf = do
-    mmreq <- timeout tm (HTTP.receive hdl)
-    case mmreq of
-      Nothing   -> throw TimeOut
-      Just mreq -> return mreq
+recvRequest hdl cnf = fromMaybe (throw TimeOut) <$> timeout tm (HTTP.receive hdl)
  where
    microseconds = 1000000
    tm = connectionTimer cnf * microseconds
diff --git a/Network/Web/Server/Basic.hs b/Network/Web/Server/Basic.hs
--- a/Network/Web/Server/Basic.hs
+++ b/Network/Web/Server/Basic.hs
@@ -16,6 +16,7 @@
 import qualified Data.ByteString.Char8      as S
 import qualified Data.ByteString.Lazy.Char8 as L
 import Data.List
+import Data.Maybe
 import Data.Time
 import Network.TCPInfo
 import Network.Web.Date
@@ -222,7 +223,7 @@
     minfo <- info cnf file'
     case minfo of
       Nothing     -> return Nothing
-      Just (_,mt) -> return $ Just (responseOK ct (utcToDate mt))
+      Just (size,mt) -> return $ Just (responseOK ct size (utcToDate mt))
 
 ----------------------------------------------------------------
 
@@ -253,12 +254,9 @@
 
 tryPost :: BasicConfig -> Request -> IO Response
 tryPost cnf req = case mapper cnf (reqURI req) of
-  PathCGI cgi -> do
-    mres <- tryGetCGI cnf req cgi
-    case mres of
-      Nothing  -> undefined -- never reached
-      Just res -> return res
-  _            -> return responseBadRequest
+    -- never reached to undefined
+    PathCGI cgi -> fromMaybe undefined <$> tryGetCGI cnf req cgi
+    _           -> return responseBadRequest
 
 ----------------------------------------------------------------
 
@@ -274,8 +272,8 @@
 
 ----------------------------------------------------------------
 
-responseOK :: CT -> HttpDate -> Response
-responseOK ct modified = makeResponse2 OK (Just L.empty) (Just 0) kvs
+responseOK :: CT -> Integer -> HttpDate -> Response
+responseOK ct size modified = makeResponse2 OK (Just L.empty) (Just size) kvs
   where
     kvs = [(FkContentType,ct),(FkLastModified,modified)]
 
diff --git a/Network/Web/Server/CGI.hs b/Network/Web/Server/CGI.hs
--- a/Network/Web/Server/CGI.hs
+++ b/Network/Web/Server/CGI.hs
@@ -41,9 +41,7 @@
 createHandle :: IO (Handle,Handle)
 createHandle = do
   (rfd,wfd) <- createPipe
-  rhdl <- fdToHandle rfd
-  whdl <- fdToHandle wfd
-  return (rhdl,whdl)
+  (,) <$> fdToHandle rfd <*> fdToHandle wfd
 
 type ENVVARS = [(String,String)]
 
diff --git a/webserver.cabal b/webserver.cabal
--- a/webserver.cabal
+++ b/webserver.cabal
@@ -1,5 +1,5 @@
 Name:                   webserver
-Version:                0.4.1
+Version:                0.4.2
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
