有没有办法在不启用-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"))
这既不好,也不健壮。似乎最好的前进路线是在单独的启用 TH 的模块中定义上述nilName
与 (== nilName)
的组合,而不是模式匹配。