3
我在为这个问题苦苦挣扎 - QuickCheck如何为所有类型生成值?也许它可以伪造它,只测试类型Arbitrary a => a
?使用QuickCheck生成存在类型?
我只是想知道一个人如何能做出任意的数据构造的实例与生存型:
data Foo a = Foo a (forall b. (a -> b, b -> a))
我在为这个问题苦苦挣扎 - QuickCheck如何为所有类型生成值?也许它可以伪造它,只测试类型Arbitrary a => a
?使用QuickCheck生成存在类型?
我只是想知道一个人如何能做出任意的数据构造的实例与生存型:
data Foo a = Foo a (forall b. (a -> b, b -> a))
这是一个有点分不清你真正要做的,尤其是你的示例类型没有多大意义。考虑别的:
newtype WrappedLens s t a b = WrappedLens (forall f . Functor f => (a -> f b) -> s -> f t)
newtype WL = WL (WrappedLens (Int, Int) (Int, Int) Int Int)
是否有可能使任意WL
?当然!只需明确地通过fmap
并使用任意的函数实例。是否可以制作一个任意的守法镜头WL
?现在这是一个更高的订单。
我会推测,制作任意值涉及更高级别的类型并不是那种类型,因为它们倾向于以某种方式涉及函数,而且很难将任意函数限制为实际的函数想考虑。
是否有可能具有该类型的值?另外,这不是一个二级类型,而不是一个存在类型? –
事实上,该类型的唯一值至少与'Foo a1(const undefined,const a2)一样坏' – dfeuer