TemplateHaskell 引用记录了两个引号 ( ''
) 作为获取类型名称的方式:
> ''String
GHC.Base.String
这适用于这种类型(名称)。但是,我找不到一种方法让它很好地工作,例如Maybe String
:
> ''Maybe String -- interprets String as a data constructor
> ''Maybe ''String -- wants to apply ''String to the Name type
我知道我可以通过 using 来解决[t| Maybe String |]
问题,但这在 Q monad 中,并且需要更改类型,而且我认为只有在拼接时才在相应的时刻进行类型检查。
我也可以先定义一个类型别名,type MaybeString = Maybe String
然后使用''MaybeString
,但这也很麻烦。
''
有什么方法可以通过报价直接得到我想要的东西?