haskell - RequestBody 应用于太多类型参数

标签 haskell http-conduit

以下函数不进行类型检查:

import qualified Control.Exception as E
import Data.Conduit (ResourceT)
import Network.HTTP.Types (Method, Status(..))
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy.Char8 as LBS

doHttps :: Method -> String
        -> Maybe (RequestBody (ResourceT IO))
        -> IO (Either E.SomeException (Response LBS.ByteString))
doHttps reqMethod url body = undefined

它会产生以下错误:

RequestBody is applied to too many type arguments
    In the type signature for `doHttps':
      doHttps :: Method
                 -> String
                    -> Maybe (RequestBody (ResourceT IO))
                       -> IO (Either E.SomeException (Response LBS.ByteString))
Failed, modules loaded: none.

doHttps 函数是 this function 的简化版本。但显然模块类型检查中的原始函数,但上面的代码片段不起作用。为什么会发生这种情况?

最佳答案

http-conduit 库的不同版本。在版本 1.* 中,RequestBody 采用类型参数:

http://hackage.haskell.org/package/http-conduit-1.9.6/docs/Network-HTTP-Conduit.html#t:RequestBody

但是,在版本 2.* 中,它不接受类型参数:

http://hackage.haskell.org/package/http-conduit-2.0.0/docs/Network-HTTP-Conduit.html#t:RequestBody

关于haskell - RequestBody 应用于太多类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328537/

相关文章:

haskell - 卡在 Haskell Wiki 中的 State Monad 示例中

haskell - 使用 Scotty 的网络 I/O 吞吐量出乎意料地低

http - Haskell 找不到模块 `Network.HTTP.Conduit'

haskell - 如何强制 GHC 仅计算静态表达式一次

haskell - 在 Haskell 中使用 Network.URL 库

multithreading - Haskell 轻量级线程开销和在多核上的使用

haskell - 当我并行运行大量 http 请求时,我得到 "no such protocol name: tcp"

parsing - Monad 解析器 - 无法将预期类型 ‘[(b, String)]’ 与实际类型 ‘Parser b’ 匹配

haskell - 处理 http-conduit 中的 HTTP 查询参数

haskell - http-conduit 浏览器使用