main = withSocketsDo $ dohttp_socket <- listenOn $ PortNumber 9090dispatch_on_accept http_socket $ either handle_failed_request handle_valid_requestsClose http_sockethandle_failed_request failure = return $ Response (4,0,0) "Bad Request" [mkHeader HdrConnection "close"](encodeUtf8 $ pack $ show failure)handle_valid_request request = dolet request_body = rqBody requestreturn $ Response (2,0,0) "OK" [mkHeader HdrConnection "close"](encodeUtf8 $ pack $ show request_body)dispatch_on_accept http_socket handler = forever $ accept http_socket >>= forkIO . httpHandler . fstwherehttpHandler client_socket = bracket (socketConnection "client" 0 client_socket)Network.HTTP.closeclient_interactclient_interact :: HandleStream BS.ByteString -> IO ()client_interact byte_stream = receiveHTTP byte_stream >>= handler >>= respondHTTP byte_stream