在没有 -XTemplateHaskell 的情况下为 '[] 获取 TH.Name

Obtaining TH.Name for '[] without -XTemplateHaskell

有没有办法在不启用 -XTemplateHaskell 的情况下获取(从基本模块导入或编写表达式)代表 '[] 的类型 Language.Haskell.TH.Name 的值?

这样做的一个很好的理由是像 hlint 这样的工具不能很好地处理 TH,因此能够避免它是有好处的。然后我可以定义

nilName :: Name
nilName = '[]

在一个单独的文件中导入它,但这只有在没有可以导入或调用它的标准名称时才有意义。此外,nilName 不能用于模式匹配。有这种事吗?

import Language.Haskell.TH.Syntax

nilName = mkNameG DataName "ghc-prim" "GHC.Types" "[]"

nilName 的等效定义,尽管它很丑陋。它可以扩展为允许模式匹配屈服于

的形式
nilName = Name (OccName "[]") (NameG DataName (PkgName "ghc-prim") (ModName "GHC.Types"))

既不更好也不健壮。似乎最好的前进路线是将上述 nilName 定义在一个单独的启用 TH 的模块中与 (== nilName) 而不是模式匹配的组合。