【发布时间】:2015-02-16 15:53:52
【问题描述】:
我有一个函数可以返回动态绑定的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 类型转换为完全限定的类型,或者检查m 和myFn 是否相同(在当前上下文中)?
【问题讨论】:
-
我认为在这里做的最简单的事情是编写一个自定义的
==函数,它比较Names 以使引用的名称和未引用的名称相等。这与从两种类型中剥离模块限定符并正常比较它们相同。