GHC接受的unicode字符范围

时间:2017-01-03 07:26:53

标签: string haskell unicode ghc

这可能听起来有些荒谬,但GHC无法编制包含培根,羊角面包,黄瓜和土豆的字符串:

main = putStrLn "      "

我意识到我可以轻松地写

main = putStrLn "\x1F953  \x1F950  \x1F952  \x1F954"

达到同样的效果,但我一直认为GHC会在其来源中接受任何unicode。那么: GHC在源文件中接受的unicode字符有什么实际限制

顺便说一句:我知道支持这类事情对于GHC词法分析器来说是地狱(实际上我在为我写的词法分析器编写测试用例时遇到了上述问题),但我仍然有点失望。

1 个答案:

答案 0 :(得分:10)

main = putStrLn " "保存为UTF-8并在macOS上使用ghc 8.0.1运行,我得到了:

lexical error in string/character literal at character '\129365'

我发现这与此相关(但已关闭)ghc bug report

  

原因(对于这两个问题)是旧版本的GHC支持旧版本的Unicode:

$ ghc-7.0.3 -e "Data.Char.generalCategory '\8342'"
NotAssigned

所以问题似乎是我们正在使用的ghc版本还不支持更新的表情符号 - 它认为unicode代码点是未分配的,即使它被分配给较新版本的unicode中的表情符号也会出错

一个相关的open ghc bug ticket,主要讨论允许哪些空白字符。

最后,lit_error function in Lexer.x似乎是出现错误的地方。该文件中有多个函数可以调用该错误,因此不确定它来自哪个......