我刚刚开始使用Haskell和Yesod所以请原谅我是否遗漏了明显的东西。
我注意到Yesod.Request中的fileContentType。即使Yesod.Content具有显式的ContentType,FileInfo也是文本。我想知道,为什么它不是ContentType而是什么是最干净的转换?
提前致谢!
答案 0 :(得分:2)
这归结为一个更大的问题。很多HTTP规范都用ASCII表示。问题是,我们如何代表它。基本上有三种选择:
Ascii
创建一个特殊的新类型ByteString
。这是最正确的,但也非常繁琐,因为它涉及大量的包装/展开。我们尝试了这种方法,并得到了很多负面反馈。ByteString
s。这是有效的,而且大多是正确的,但允许人们输入非ASCII二进制数据。Text
(或String
)。这是开发人员最友好的,但允许您输入非ASCII字符数据。由于编码/解码开销,它的效率低于(1)或(2)。总的来说,我们一直在为(3)大多数操作而努力,尤其是像Yesod内部的会话键这样的事情。您可以说ContentType
是不一致的,应该更改为Text
,但我认为这似乎不会打扰任何人,更具语义性,更快一点。
tl;博士:没有充分理由:)
答案 1 :(得分:0)
您已将Content
的类型与ContentType
的类型混淆。 fileContent
的{{1}}字段应为FileInfo
- 它是模式别名的模数 - ContentType
的类型为fileContentType
,{{1} }}。它可能有助于将上一个世界成像为前缀形容词,因此Text
== ContentTypeType
的类型。