【问题标题】:Is there a auto-conversion from String to ByteString?是否有从 String 到 ByteString 的自动转换?
【发布时间】:2018-10-05 20:15:53
【问题描述】:
addRequestHeader (H.hContentType, "application/json")

这是一个使用 Network.HTTP.Simple 包的例子,我见过几次。如何将字符串传递给该函数,因为它的签名是:

addRequestHeader :: Network.HTTP.Types.Header.HeaderName
 -> Data.ByteString.Internal.ByteString -> Request -> Request

当我尝试这个时,我得到错误 couldn't match expected type 'C8.ByteString' with actual type '[Char]',所以我必须使用 Data.ByteString .Char8.pack 函数来完成这项工作。为什么其他人不必这样做?是否有自动转换或这里发生了什么?

【问题讨论】:

标签: haskell


【解决方案1】:

字符串 literals 有一个“自动转换”,即那些在引号 "..." 之间明确给出的字符串,例如您的 "application/json"

要打开它,您需要OverloadedStrings 扩展。

不会自动转换其他字符串表达式(例如,String 类型的变量、函数的返回值……)。

【讨论】:

  • 谢谢。而已。我检查过了。它仅适用于静态字符串文字而不适用于字符串变量。 ?
  • @stefang 带有字符串变量,您通常希望比“转换为字节字符串”更具体,因为有几种不同的不兼容方式可以做到这一点(不是 Haskell 问题:它在 Haskell 中更明显因为它是默认使用 unicode 字符串的旧语言之一)
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多