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