dfe*_*uer 12 haskell template-haskell
我总是喜欢能够为我的代码编写属性测试。当该代码是 Template Haskell 时,我最感兴趣的是生成的代码的行为。直觉上,我希望能够写出类似的东西
import Test.QuickCheck
checkLift :: (Eq a, Lift a, Show a) => a -> Property
checkLift a = $$(liftTyped a) === a
prop_myLiftWorks :: MyType -> Property
prop_myLiftWorks = checkLift
Run Code Online (Sandbox Code Playgroud)
不幸的是,Template Haskell 阶段的限制使得这种精确的方法完全不可能。生成的拼接必须单独编译才能运行。是否有一些简单的方法可以在测试套件中启动 GHC 实例(或对包执行某些操作ghc
或haskell-language-server
?)并对其进行拼接?
理想情况下,我希望能够使用声明拼接和表达式拼接。例如,要为 编写属性测试deriving-compat
,我想要生成各种类型的任意数据类型声明,然后将 Template Haskell 派生的实例与 GHC 派生的实例进行比较。
归档时间: |
|
查看次数: |
169 次 |
最近记录: |