使用 QuickCheck 生成存在类型?
Generating an Existential type with QuickCheck?
我正在努力解决这个问题 - QuickCheck 如何为所有 类型生成一个值?也许它可以伪造它,并且只测试具有上下文 Arbitrary a => a
?
的类型
我只是想知道如何为具有存在类型的数据构造函数创建任意实例:
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
这样的中规中矩的镜头?现在这是一个更高的要求。
我推测,使任意值涉及更高等级类型的难点不在于类型,而在于它们倾向于以某种方式涉及函数这一事实,而且很难将任意函数限制为您其实要考虑
我正在努力解决这个问题 - QuickCheck 如何为所有 类型生成一个值?也许它可以伪造它,并且只测试具有上下文 Arbitrary a => a
?
我只是想知道如何为具有存在类型的数据构造函数创建任意实例:
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
这样的中规中矩的镜头?现在这是一个更高的要求。
我推测,使任意值涉及更高等级类型的难点不在于类型,而在于它们倾向于以某种方式涉及函数这一事实,而且很难将任意函数限制为您其实要考虑