我生成了一些haskell代码(在haskell中),我需要能够检测与haskell关键字冲突的名称.是否有某个地方以编程方式检查String是否是Haskell关键字?
我当然可以自己编制它们的列表,但我不喜欢重新发明轮子.此外,如果引入新关键字(通过扩展或新规范),我希望此列表自动更新.
hscolour使用这样一个简单的列表来实现其tokenise功能.
keywords =
["case","class","data","default","deriving","do","else","forall"
,"if","import","in","infix","infixl","infixr","instance","let","module"
,"newtype","of","qualified","then","type","where","_"
,"foreign","ccall","as","safe","unsafe"]
keyglyphs =
["..","::","=","\\","|","<-","->","@","~","=>","[","]"]
layoutchars =
map (:[]) ";{}(),"
symbols =
"!#$%&*+./<=>?@\\^|-~"
Run Code Online (Sandbox Code Playgroud)
你可以
import Language.Haskell.HsColour.Classify
isKeyword :: String -> Bool
isKeyword = (== [Keyword]) . map fst . tokenise
Run Code Online (Sandbox Code Playgroud)
这是:https://github.com/ghc/ghc/blob/d784bdeb62a6b11831c5235a97449ff2a86dcc52/compiler/parser/Lexer.x#L708-L765
我确定它是完整的清单,因为它是GHC词法分析器所理解的保留词.另一个有趣的列表是reservedSymsFS- 保留符号.