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

时间:2015-02-03 08:43:45

标签: haskell template-haskell

有没有办法获得(从基本模块或写表达式导入)类型Language.Haskell.TH.Name的值,代表'[]而不启用-XTemplateHaskell

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

nilName :: Name
nilName = '[]

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

1 个答案:

答案 0 :(得分:2)

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)的组合,而不是模式匹配。