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
似乎是出现错误的地方。该文件中有多个调用该错误的函数,因此不确定它的确切来源...
这听起来有点荒谬,但 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
似乎是出现错误的地方。该文件中有多个调用该错误的函数,因此不确定它的确切来源...