首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在http-conduit中构造管理器对象?

如何在http-conduit中构造管理器对象?
EN

Stack Overflow用户
提问于 2012-04-04 02:26:44
回答 1查看 363关注 0票数 1

为了继续执行dropbox query,我正在使用http-conduit尝试执行POST请求,但我不确定如何构造Manager对象。

这是我到目前为止得到的(以及有问题的一行):

代码语言:javascript
复制
data DropboxConfig = DropboxConfig { appKey :: String, appSecret :: String}

main = do
    let appKey = "asdfasdfasdfs"
    let appSecret = ";lkj;lkjlkjlkj"
    let config = DropboxConfig {appKey = appKey, appSecret = appSecret}
    let qs = buildQueryString config

    let req = def {method = methodPost, queryString = qs}

    resp <- http req (newManager)  --!Does Not work
    putStrLn $ unpack resp


buildQueryString :: DropboxConfig -> ByteString
buildQueryString config = pack $ "oauth_consumer_key="++(appKey config)++
        "&oauth_signature_method=HMAC-SHA1"++
        "&oauth_timestamp=137131200" ++
        "&oauth_nonce=4572616e48616d6d65724c61686176" ++
        "&oauth_signature=wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D

下面是我得到的错误:

代码语言:javascript
复制
    Couldn't match expected type `http-conduit-1.3.0.1:Network.HTTP.Conduit.Manager.Manager'
                with actual type `http-conduit-1.3.0.1:Network.HTTP.Conduit.Manager.ManagerSettings
                                  -> IO http-conduit-1.3.0.1:Network.HTTP.Conduit.Manager.Manager'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-04 02:33:36

实际上,类型签名说明了一切:

代码语言:javascript
复制
newManager :: ManagerSettings -> IO Manager

这是一个IO操作,因此您必须像往常一样使用<-绑定它。它还需要ManagerSettings,所以您需要提供它。我想应该是这样的(我不太熟悉这个库,只是遵循类型):

代码语言:javascript
复制
manager <- newManager def
resp <- http req manager

不过,使用withManager可能是一个更好的主意,这样您就不必担心自己关闭它。

代码语言:javascript
复制
withManager $ \manager -> do
  resp <- http req manager
  ...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9999153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档