Ale*_*lec 14 string unicode haskell ghc
这可能听起来有点荒谬,但GHC无法编制包含培根,羊角面包,黄瓜和土豆的字符串:
main = putStrLn " "
Run Code Online (Sandbox Code Playgroud)
我意识到我可以轻松写作
main = putStrLn "\x1F953 \x1F950 \x1F952 \x1F954"
Run Code Online (Sandbox Code Playgroud)
同样的效果,但我一直认为GHC会在其来源中接受任何unicode.那么:GHC在源文件中接受的unicode字符的实际限制是什么?
顺便说一句:我意识到支持这类事情对于GHC词法分析器来说是地狱(实际上我在为我写的词法分析器编写测试用例时遇到了上述问题),但我仍然有点失望.
mb2*_*b21 10
保存main = putStrLn " "为UTF-8并ghc 8.0.1在macOS上运行它,我得到:
lexical error in string/character literal at character '\129365'
Run Code Online (Sandbox Code Playgroud)
我发现这个相关(但已关闭)的ghc错误报告:
原因(对于这两个问题)是旧版本的GHC支持旧版本的Unicode:
Run Code Online (Sandbox Code Playgroud)$ ghc-7.0.3 -e "Data.Char.generalCategory '\8342'" NotAssigned
所以问题似乎是我们使用的ghc版本还不支持更新的表情符号 - 它认为unicode代码点是未分配的,即使它被分配给较新版本的unicode中的表情符号也会出错.
一个相关的开放ghc错误票,主要讨论允许哪些空白字符.
最后,lit_error函数Lexer.x似乎是错误浮出水面的地方.该文件中有多个函数可以调用该错误,因此不确定它来自哪个...