获取 '[] 的 TH.Name,不带 -XTemplateHaskell(英语:hackell)



有没有办法在不启用-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) 的组合,而不是模式匹配。

相关内容

  • 没有找到相关文章

最新更新