मैं QuickCheck संपत्ति लिखने की कोशिश कर रहा हूं जो इनपुट के रूप में एक या अधिक कार्य लेता है। इसे आसान बनाने के लिए, कि समारोह रचना की जाँच करने के लिए एक संपत्ति पर विचार लगातार समारोह आवेदन के बराबर है, और एक त्वरित और गंदा परीक्षण चालक:क्विक चेक गुणों में उपयोग किए गए शो-इन फ़ंक्शन
import Test.QuickCheck
prop_composition :: (Int -> Int) -> (Int -> Int) -> Int -> Bool
prop_composition f g x = (f . g) x == f (g x)
main :: IO()
main = quickCheck prop_composition
दुर्भाग्य से, यह संकलन नहीं करता, क्योंकि एक के लिए आदानों संपत्ति Show
तो लागू करने के लिए QuickCheck रिपोर्ट कर सकते हैं कि क्या आदानों विफलता का कारण बना की जरूरत है, लेकिन कार्यों के लिए कोई Show
कार्यान्वयन नहीं है:
Test.hs:10:7:
No instance for (Show (Int -> Int))
arising from a use of `quickCheck' at Test.hs:10:7-33
Possible fix: add an instance declaration for (Show (Int -> Int))
In the expression: quickCheck prop_composition
In the definition of `main': main = quickCheck prop_composition
मैं कार्यों के लिए Show
की अपने ही do-कुछ भी नहीं उदाहरण के लेखन की कोशिश की है ...
instance Show (a -> b) where
show _ = "[func]"
... जो संकलित, लेकिन -Wall
के साथ एक चेतावनी से चलाता है ...
Test.hs:3:9: Warning: orphan instance: instance Show (a -> b)
... जो बनाता है मुझे लगता है कि यह करने के लिए एक अधिक सही तरीका है।
मेरा आंत मुझे बताता है कि उत्तर Test.QuickCheck.Function
मॉड्यूल में है, लेकिन यह अनियंत्रित है, और मैं केवल प्रकार के हस्ताक्षर को देखने से नहीं समझ सकता कि इसमें क्या कुछ है या इसका उपयोग कैसे किया जा सकता है।