1
我想運行反轉列表的經典測試。爲此,我必須將列表專門化爲「任意」(sic!)類型的列表,例如, [INT]。我該如何專注於Frege QuickCheck中的類型?
什麼工作是
module ListCheck where
import Test.QuickCheck
myReverse :: [Int] -> [Int]
myReverse = reverse
reverse_of_reverse_is_original = property (\xs -> myReverse(myReverse xs) == xs)
或分解出類似
reverse_invariant :: [Int] -> Bool
reverse_invariant xs = reverse(reverse xs) == xs
reverse_of_reverse_is_original = property reverse_invariant
不變,但我寧願想不換原來的功能,但直接使用它。通常通過加入強制專業化的Haskell技巧
... where types = xs :: [Int]
在此處不起作用。
是否有一個不太詳細的解決方案?
太棒了!謝謝 – Dierk 2014-11-22 14:37:47
我沒有試過這個,但是你可以在'reverse'上貼上一個類型簽名嗎? 'property(\ xs - >(reverse :: [Int] - > [Int])(reverse xs)== xs)' – dfeuer 2014-11-22 14:48:00
@dfeuer正確,只要它粘在類型簽名的哪裏並不重要不在未使用的let/where定義中,並且可以從中派生'xs'的類型。 – Ingo 2014-11-22 14:50:29