以下函数不进行类型检查:
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/