ghc-exactprint-0.2: src/Language/Haskell/GHC/ExactPrint/Lookup.hs
module Language.Haskell.GHC.ExactPrint.Lookup (keywordToString) where
import GHC (AnnKeywordId(..))
-- | Maps `AnnKeywordId` to the corresponding String representation.
-- There is no specific mapping for the following constructors.
-- `AnnOpen`, `AnnClose`, `AnnVal`, `AnnPackageName`, `AnnHeader`, `AnnFunId`,
-- `AnnInfix`
keywordToString :: AnnKeywordId -> String
keywordToString kw =
let mkErr x = error $ "keywordToString: missing case for:" ++ show x
in
case kw of
-- Specifically handle all cases so that there are pattern match
-- warnings if new constructors are added.
AnnOpen -> mkErr kw
AnnClose -> mkErr kw
AnnVal -> mkErr kw
AnnPackageName -> mkErr kw
AnnHeader -> mkErr kw
AnnFunId -> mkErr kw
AnnInfix -> mkErr kw
AnnValStr -> mkErr kw
AnnAs -> "as"
AnnAt -> "@"
AnnBang -> "!"
AnnBackquote -> "`"
AnnBy -> "by"
AnnCase -> "case"
AnnClass -> "class"
AnnCloseC -> "}"
AnnCloseP -> ")"
AnnCloseS -> "]"
AnnColon -> ":"
AnnComma -> ","
AnnCommaTuple -> ","
AnnDarrow -> "=>"
AnnData -> "data"
AnnDcolon -> "::"
AnnDefault -> "default"
AnnDeriving -> "deriving"
AnnDo -> "do"
AnnDot -> "."
AnnDotdot -> ".."
AnnElse -> "else"
AnnEqual -> "="
AnnExport -> "export"
AnnFamily -> "family"
AnnForall -> "forall"
AnnForeign -> "foreign"
AnnGroup -> "group"
AnnHiding -> "hiding"
AnnIf -> "if"
AnnImport -> "import"
AnnIn -> "in"
AnnInstance -> "instance"
AnnLam -> "\\"
AnnLarrow -> "<-"
AnnLet -> "let"
AnnMdo -> "mdo"
AnnMinus -> "-"
AnnModule -> "module"
AnnNewtype -> "newtype"
AnnOf -> "of"
AnnOpenC -> "{"
AnnOpenP -> "("
AnnOpenS -> "["
AnnPattern -> "pattern"
AnnProc -> "proc"
AnnQualified -> "qualified"
AnnRarrow -> "->"
AnnRec -> "rec"
AnnRole -> "role"
AnnSafe -> "safe"
AnnSemi -> ";"
AnnStatic -> "static"
AnnThen -> "then"
AnnTilde -> "~"
AnnTildehsh -> "~#"
AnnType -> "type"
AnnUnit -> "()"
AnnUsing -> "using"
AnnVbar -> "|"
AnnWhere -> "where"
Annlarrowtail -> "-<"
Annrarrowtail -> "->"
AnnLarrowtail -> "-<<"
AnnRarrowtail -> ">>-"
AnnEofPos -> ""