假设,我有像
data D = A | B String | C String
data TestIt m = TestIt {
x :: m Int
, y :: Int -> m D
}
我正在编写 SmallCheck 测试,所以我需要以下Serial
实例TestIt
:
instance Monad m => Serial m (TestIt m) where
series = TestIt <$> (pure <$> series) <~> xxx
这个怎么写xxx
?我知道它可能需要CoSerial
类似的功能,但是 1)我不确定 2)我不知道如何编写它。当我看到CoSerial
文档时,我看到我的CoSerial
遗嘱有Int
而不是D
在其定义中:
instance (CoSerial m a) => CoSerial m (Int a) where
coseries rs = ???
所以我不知道CoSerial
s 以及如何使用它们来制作Serial
for Int -> m D
。
我也想拥有y
field的依赖序列。我的意思是如果x
有样本 0 那么序列y
应该0
作为参数。可能吗?