有没有办法获得(从基本模块或写表达式导入)类型Language.Haskell.TH.Name
的值,代表'[]
而不启用-XTemplateHaskell
?
这样做的一个很好的理由是像hlint这样的工具不能很好地与TH配合使用,因此可以避免使用它,因此有一个好处。然后我可以定义
nilName :: Name
nilName = '[]
在一个单独的文件中并导入它,但这只有在没有可以导入或调用它的标准名称时才有意义。此外,nilName
不能用于模式匹配。有这样的事吗?
答案 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)
的组合,而不是模式匹配。