使用 mkName 测试模板 Haskell
Testing Template Haskell with mkName
我有一个 returns 动态绑定 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
是否相同(在当前上下文中)?
哇好久没有答案了,不过 post 网上的答案永远不会太迟!
myFn = ConT ''MyType
刻度已通过 -XTemplateHaskell
语言扩展启用,并记录在此处:
我有一个 returns 动态绑定 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
是否相同(在当前上下文中)?
哇好久没有答案了,不过 post 网上的答案永远不会太迟!
myFn = ConT ''MyType
刻度已通过 -XTemplateHaskell
语言扩展启用,并记录在此处: