我在哪里可以找到保留的Haskell关键字列表为[String]

mb1*_*b14 3 haskell ghc

我生成了一些haskell代码(在haskell中),我需要能够检测与haskell关键字冲突的名称.是否有某个地方以编程方式检查String是否是Haskell关键字?

我当然可以自己编制它们的列表,但我不喜欢重新发明轮子.此外,如果引入新关键字(通过扩展或新规范),我希望此列表自动更新.

lef*_*out 7

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)


dan*_*bst 5

这是:https://github.com/ghc/ghc/blob/d784bdeb62a6b11831c5235a97449ff2a86dcc52/compiler/parser/Lexer.x#L708-L765

我确定它是完整的清单,因为它是GHC词法分析器所理解的保留词.另一个有趣的列表是reservedSymsFS- 保留符号.