继续寻求执行dropbox query我正在使用http-conduit尝试执行POST请求,但我不确定如何构建Manager
对象。
这是我到目前为止(以及有问题的一行):
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
以下是我遇到的错误:
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'
答案 0 :(得分:3)
类型签名说明了一切,真的:
newManager :: ManagerSettings -> IO Manager
这是一个IO操作,因此您必须一如既往地使用<-
绑定它。它还需要ManagerSettings
,因此您需要提供它。这样的事情应该这样做,我认为(不太熟悉库,只是遵循类型):
manager <- newManager def
resp <- http req manager
尽管如此,使用withManager
可能更好一点,这样您就不必担心自己关闭它了。
withManager $ \manager -> do
resp <- http req manager
...