httpGetをさらにリファクタリング

HaskellでHTTPのGETリクエストを投げる話のつづき。
イマイチかっこよくないところを関数化するというアプローチを更に押し進めて、以下のような感じになりました。

import Network.HTTP
import Network.URI
import Data.Maybe

httpGet :: String -> IO (String)
httpGet url = parseURI' url >>= getRequest' >>= simpleHTTP >>= getResponseBody

parseURI' :: String -> IO (URI)
parseURI' = return . fromJust . parseURI

getRequest' :: URI -> IO (Request String)
getRequest' uri = return $ Request {
                          rqURI = uri
                          ,rqMethod = GET
                          ,rqHeaders = [(Header HdrAcceptCharset "UTF-8")
                                        , (Header HdrAccept "text/xml; charset=UTF-8")
                                       ]
                          ,rqBody = ""
                        }

httpGet本体は相当シンプルになりました。

また以前のコードではレスポンスからボディを得る処理を自前で書いていたのですが、Network.HTTP.getResponseBodyという関数があることを知ったので置き換えました。APIを読まずにPG書いちゃいかんですね・・・

なお、このコードはシンプルさを優先するためにエラー処理を怠っていることに注意して下さい。このコードでは不正なURLが入力されたときのエラーを拾えません。