GHC 接受的 unicode 字符范围

Range of unicode characters GHC accepts

这听起来有点荒谬,但 GHC 无法编译我包含培根、羊角面包、黄瓜和土豆的字符串:

main = putStrLn "      "

我意识到我可以轻松地写

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

效果相同,但我一直认为 GHC 会在其源代码中接受任何 unicode。所以:GHC 在源文件中接受的 unicode 字符的实际限制是什么


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

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

lexical error in string/character literal at character '9365'

我发现这个相关(但已关闭)ghc bug report:

The cause (for both problems) was that older versions of GHC support a older version of Unicode:

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

所以问题似乎是我们使用的 ghc 版本还不支持较新的表情符号——它认为 unicode 代码点未分配并且出错,即使它已分配给较新版本中的表情符号unicode.

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

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