获取CurlCode形式的cURL IO响应 - Haskell

时间:2015-04-29 05:32:38

标签: json parsing haskell curl io

我对Haskell比较新,我在解析cURL请求的响应时遇到了一些麻烦。

这是我到目前为止的代码:

import Control.Monad
import Network.Curl
import Data.Aeson

getReq :: URLString -> [CurlOption] -> IO (CurlCode, String)
getReq url opt = curlGetString url opt

当我使用getReq函数时,

Prelude> getReq "http://google.com" []

我得到这样的回复:

(CurlOk, "<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">...)

我想要做的只是以某种方式解析出CurlCode(CurlOk)。这是一种IO类型,所以我对如何从中获取CurlCode感到困惑。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

以下是您可以做的一些想法。他们中的任何一个是否接近你想做的事情?

getCurlCode :: IO (CurlCode, String) -> IO CurlCode
getCurlCode res = do
    (cc, _) <- res
    return cc

printCurlCode :: IO (CurlCode, String) -> IO ()
printCurlCode res = do
    (cc, _) <- res
    print cc

printStatus :: IO (CurlCode, String) -> IO ()
printStatus res = do
    cc <- getCurlCode res
    if cc == CurlOk
        then putStrLn "Everything okay"
        else putStrLn "Maybe not okay"

curlMessage :: CurlCode -> String
curlMessage cc =
    case cc of
        CurlOk -> "Everything okay"
        _      -> "Maybe not okay"

printCurlMessage :: IO (CurlCode, String) -> IO ()
    cc <- getCurlCode res
    let msg = curlMessage cc
    putStrLn msg

答案 1 :(得分:1)

您可以像这样使用getReq

do
  (c, _) <- getReq ...

由于getReq返回IO monad而不是正常值,因此必须在另一个IO monad中使用。

您可以从Monad

了解有关monad和do-notation的更多信息