2015-09-03 19 views
3

我在爲這個問題苦苦掙扎 - QuickCheck如何爲所有類型生成值?也許它可以僞造它,只測試類型Arbitrary a => a使用QuickCheck生成存在類型?

我只是想知道一個人如何能做出任意的數據構造的實例與生存型:

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

是否有可能具有該類型的值?另外,這不是一個二級類型,而不是一個存在類型? –

+0

事實上,該類型的唯一值至少與'Foo a1(const undefined,const a2)一樣壞' – dfeuer

回答

5

這是一個有點分不清你真正要做的,尤其是你的示例類型沒有多大意義。考慮別的:

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?現在這是一個更高的訂單。

我會推測,製作任意值涉及更高級別的類型並不是那種類型,因爲它們傾向於以某種方式涉及函數,而且很難將任意函數限制爲實際的函數想考慮。

相關問題