如何为包装函数编写 Hedgehog 生成器?

我目前正在阅读Thinking with Types这本书。在第三章方差中,作者提供了一个练习,读者应该在其中实现 T1 的函子实例。

newtype T1 a = T1 (Int -> a)

我找到了几种进行这种类型检查的方法,例如

instance Functor T1 where
  fmap f (T1 a) = T1 (f . a)

……和

instance Functor T1 where
  fmap f (T1 a) = T1 (f <$> a)

当然,仅仅进行实例类型检查并不意味着实例遵守函子定律。为了尝试测试我编写的实例是否正确(从而表明上面编写的实例中至少有一个错误),我想编写一些基于属性的测试。

我想使用 hedgehog-classes 库来编写我的测试。该库提供了我认为需要的 lawsCheckfunctorLaws 函数。我想我可以在 GHCi 中使用以下行测试我的实例

> lawsCheck (functorLaws genT1)

我缺少的是如何编写 genT1,我想它会生成一个(或者可能是几个?它实际上应该是 genT1List?)随机 T1 值.我是否需要使用类似 hedgehog-fn 的东西来生成任意函数,以便我可以为 (Int -> a) 生成一些随机的 T1 值来包装?如果是这样,如何?

iCMS 回答:如何为包装函数编写 Hedgehog 生成器?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/447193.html

大家都在问