मैंने कभी-कभी लोगों को यह कहते हुए देखा है कि क्विक चेक में जनरल प्रकार मोनैड कानूनों का पालन नहीं करता है, हालांकि मैंने इसके साथ जाने के लिए कोई स्पष्टीकरण नहीं देखा है। अब, क्विक चेक 2.7 के Test.QuickCheck.Gen.Unsafe मॉड्यूल का कहना है कि जनरल केवल "नैतिक रूप से" एक मोनड है, लेकिन छोटी व्याख्या मुझे मेरे सिर को खरोंच कर देती है। क्या आप एक चरण-दर-चरण उदाहरण दे सकते हैं कि कैसे जनरल मोनाद कानून तोड़ता है?क्विक चेक जनरल एक मोनड नहीं है
उत्तर
यदि आप कुछ साबित करना चाहते हैं तो एक मोनाड है तो आपको यह साबित करना होगा कि यह मोनैड कानूनों को पूरा करता है। यहाँ एक
m >>= return = m
Gen
के लिए दस्तावेज़ क्या है कि कानून में (=)
वास्तव में इसका मतलब है की चर्चा करते हुए है। Gen
मान कार्य हैं, इसलिए समानता के लिए उनकी तुलना करना मुश्किल है। इसके बजाय, हम (>>=)
और return
की परिभाषा इनलाइन और संतुलन संबंधी तर्क के माध्यम से साबित होता है कि कानून रखती
m = m >>= return
m = m >>= (\a -> MkGen (\_ _ -> a))
MkGen m = MkGen m >>= (\a -> MkGen (\_ _ -> a))
MkGen m = MkGen (\r n ->
let (r1,r2) = split r
MkGen m' = (\a -> MkGen (\_ _ -> a)) (m r1 n)
in m' r2 n
)
MkGen m = MkGen (\r n ->
let (r1,r2) = split r
MkGen m' = MkGen (\_ _ -> m r1 n)
in m' r2 n
)
MkGen m = MkGen (\r n ->
let (r1,r2) = split r
in (\_ _ -> m r1 n) r2 n
)
MkGen m = MkGen (\r n ->
let (r1,r2) = split r
in m r1 n
)
MkGen m = MkGen (\r -> m (fst $ split r))
तो हो सकता है, अंततः, इकाई कानून जब तक fst . split == id
, which is doesn't धारण करने के लिए असफल प्रतीत होता है। और नहीं करना चाहिए।
लेकिन नैतिक रूप से, fst (split r)
r
जैसा ही है? खैर, जब तक हम परिचालन कर रहे हैं जैसे कि हम बीज मूल्य से अनजान हैं, हां, fst . split
नैतिक रूप से id
के बराबर है। Gen
-as-a-function द्वारा उत्पादित वास्तविक मान अलग-अलग होंगे, लेकिन मानों का वितरण invariant है।
और यही दस्तावेज का जिक्र है। मोनैड कानूनों में हमारी समानता समान रूप से नहीं रखती है, बल्कि पर विचार करके केवल "नैतिक रूप से" a
के मानों पर संभाव्यता वितरण होने के लिए।
- 1. क्विक चेक
- 2. क्विक चेक
- 3. क्विक चेक
- 4. हास्केल के क्विक चेक
- 5. हास्केल - क्विक चेक
- 6. मोनाडिक क्विक चेक
- 7. वर्कबैक क्विक चेक 2 में चेक करें?
- 8. क्विक चेक 2 बैच प्रोसेसिंग
- 9. क्विक चेक क्यों छोड़ देता है?
- 10. क्विक चेक 1 से क्विक चेक 2 में कनवर्ट करने के लिए "कुकबुक"?
- 11. क्विक चेक: दो जेनरेटर कैसे गठबंधन करें?
- 12. आश्रित प्रकारों के लिए क्विक चेक परीक्षण
- 13. निरंतर एकीकरण के साथ हनीट/क्विक चेक
- 14. यह एक मोनड नहीं है, लेकिन यह क्या है?
- 15. क्विक चेक गुणों में उपयोग किए गए शो-इन फ़ंक्शन
- 16. मैबेस को एक मोनड
- 17. क्विक चेक उदाहरण कैबेल पैकेज में कहां से संबंधित हैं?
- 18. क्विक चेक से मुझे अच्छे (छोटे) सिंक कैसे मिलते हैं?
- 19. jQuery एक मोनड
- 20. स्केलस या तो मोनड क्यों नहीं है?
- 21. बाइटस्ट्रिंग का उपयोग कर हास्केल क्विक चेक 2?
- 22. जनरल फ़ोल्डर एंड्रॉयड परियोजना
- 23. एनोटेशन कोड जनरल JavaPoet
- 24. सर्वर साइड जावास्क्रिप्ट - जनरल
- 25. जनरल विफलता इमारत bootstrapper
- 26. रीडर मोनड
- 27. हास्केल: क्विक चेक के साथ एक (प्रतिक्रियाशील) एफएसएम का परीक्षण कैसे करें?
- 28. पहचान मोनड उपयोगी क्यों है?
- 29. आईओ मोनड
- 30. क्विक चेक के साथ एक असफल परीक्षण संपत्ति का कारण कैसे प्रदर्शित करें?
'जेन' के लिए मोनैड कानूनों को क्विक चेक गुणों के रूप में एन्कोड करें, उसी बीज के साथ चलें, और अपने काउंटररेक्समल्स को त्वरित जांचें। :-) – luqui