我对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感到困惑。
非常感谢任何帮助!
答案 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的更多信息