【问题标题】:Generating an Existential type with QuickCheck?使用 QuickCheck 生成存在类型?
【发布时间】:2015-09-04 10:06:21
【问题描述】:

我正在努力解决这个问题 - QuickCheck 如何为所有类型生成一个值?也许它可以伪造它,并且只测试具有上下文Arbitrary a => a 的类型?

我只是想知道有人如何为具有存在类型的数据构造函数创建一个任意实例:

data Foo a = Foo a (forall b. (a -> b, b -> a))

【问题讨论】:

  • 是否可以有该类型的值?还有,那不是二阶类型,不是存在类型吗?
  • 确实,该类型的唯一值看起来至少和Foo a1 (const undefined, const a2)一样糟糕

标签: haskell quickcheck existential-type


【解决方案1】:

很难说出您真正想要做什么,特别是因为您的示例类型没有多大意义。考虑别的:

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这是一个守法的镜头?现在这是一个更高的要求。

我推测,制作涉及更高级别类型的任意值的难点与其说是类型,不如说是它们倾向于以某种方式涉及函数,并且很难将任意函数限制为您真正想要的函数考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多