模板Haskell - 如何查找类型操作符名称?

时间:2015-11-01 17:38:05

标签: haskell template-haskell

如何查找类型操作员名称?这不起作用:

IssueTH.hs:

{-# LANGUAGE TemplateHaskell #-}
module IssueTH where
import Language.Haskell.TH

f :: Q [Dec]
f = do
    Just n <- lookupTypeName "GHC.TypeLits.*"
    return []

Issue.hs:

{-# LANGUAGE TemplateHaskell #-}
module Issue where
import IssueTH

$f

ghc Issue.hs失败并显示消息:

Pattern match failure in do expression at IssueTH.hs

"GHC.TypeLits.*""GHC.TypeLits.(*)"替换"*"也不起作用。

1 个答案:

答案 0 :(得分:3)

我想我现在已经有足够的答案了。唉,我只找到了问题的原因,但没有找到解决方法。

我的测试显示lookupTypeName 支持类型操作符,但前提是它们以:开头。

最初这是一个要求,与中缀数据构造函数类似,但这被提升为允许像GHC.TypeLits中的算术类型运算符这样的东西。 (缺点是你不能再使用类型操作符变量,就像Arrow代码之类的东西一样受欢迎。)

大概lookupTypeName未更新以考虑到这一点,我为此filed a bug report

编辑:最终解决了这个问题,应该是即将推出的GHC 8.2.1。