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