使用mkName测试模板Haskell

时间:2015-02-16 15:53:53

标签: haskell template-haskell

我有一个返回动态绑定Type的函数 - 本质上是ConT $ mkName "MyType"。当然,实际功能要复杂得多,足以让我为它编写测试,最好是清晰易读。但是以下内容:

import Language.Haskell.TH
import MyTypeModule (MyType)

myFn :: Type    
myFn = ConT $ mkName "MyType"

test = ... $ do
  m <- runQ [t| MyType |]
  myFn `shouldBe` m

永远会失败,因为m将解析为ConT MyTypeModule.MyType而不是ConT MyType

有没有一种很好的方法可以将myFn类型转换为完全限定的类型,或者检查mmyFn是否相同(在当前上下文中)?

1 个答案:

答案 0 :(得分:1)

哇,很久没有答案了,但永远不会太晚,无法在互联网上发布答案!

{% include header.html' %}

使用myFn = ConT ''MyType 语言扩展名启用了刻度,并在此处进行了记录:

https://hackage.haskell.org/package/template-haskell-2.13.0.0/docs/Language-Haskell-TH-Syntax.html#t:Name