1

我刚开始使用 Haskell 和 Yesod,所以如果我遗漏了一些明显的东西,请原谅。

我注意到Yesod.Request .FileInfo 中的 fileContentType 是一个文本,即使Yesod.Content有一个明确的 ContentType。我想知道,为什么它不是 ContentType 而不是最干净的转换?

提前致谢!

4

2 回答 2

2

这归结为一个更大的问题。很多 HTTP 规范都是用 ASCII 表示的。问题是,我们如何表示它。基本上有三种选择:

  1. Ascii围绕 a创建一个特殊的新类型ByteString。这是最正确的,但也非常乏味,因为它涉及大量的包装/展开。我们尝试了这种方法,得到了很多负面反馈。
  2. 使用正常ByteString的 s。这是有效的,而且大部分是正确的,但允许人们输入非 ASCII 二进制数据。
  3. 使用Text(或String)。这是对开发人员最友好的,但允许您输入非 ASCII 字符数据。由于编码/解码开销,它比 (1) 或 (2) 效率低一些。

总的来说,对于大多数操作,我们一直在朝着 (3) 前进,尤其是对于 Yesod 内部的会话密钥之类的事情。您可以说这ContentType是一个不一致的地方,应该改为Text,但我认为它似乎不会打扰任何人,它更具语义性,而且速度更快。

tl;博士:没有充分的理由:)

于 2012-01-24T18:53:52.513 回答
0

您混淆了 of 的类型Content和 的类型ContentType。的fileContent字段FileInfo应该是- 它是,以类型别名为模 -的ContentType类型fileContentType是。将最后一个世界想象成前缀形容词可能会有所帮助,所以== 的类型。TextContentTypeTypeContentTypeContent

于 2012-01-24T18:36:24.880 回答