this ट्यूटोरियल में मैं निम्नलिखित स्निपेट मिल गया है:शायद इकाई बाँध समारोह पूर्वता
deposit :: (Num a) => a -> a -> Maybe a
deposit value account = Just (account + value)
withdraw :: (Num a,Ord a) => a -> a -> Maybe a
withdraw value account = if (account < value)
then Nothing
else Just (account - value)
eligible :: (Num a, Ord a) => a -> Maybe Bool
eligible account =
deposit 100 account >>=
withdraw 200 >>=
deposit 100 >>=
withdraw 300 >>=
deposit 1000 >>
return True
main = do
print $ eligible 300 -- Just True
print $ eligible 299 -- Nothing
मैं समझ नहीं कैसे >>=
समारोह काम करने के लिए माना जाता है। पहले तो वह अपने पहले पैरामीटर के रूप में एक Maybe a
मूल्य लेता है: deposit 100 account >>=
बाद में, लेकिन यह अपनी पहली पैरामीटर के रूप में a -> Maybe a
लेने के लिए लगता है: withdraw 200 >>=
यह कैसे संकलक द्वारा अनुमोदित किया जा सकता है? >>=
को अपने पहले पैरामीटर के रूप में Maybe a
नहीं लेना चाहिए? ((a >>= b) >>= c) >>= d
लेकिन जहाँ तक मुझे पता है, यह विपरीत है:: a >>= (b >>= (c >>= d))
आपने इसे 'डू' नोटेशन के साथ भ्रमित कर दिया होगा: 'एक <- b; सी <- डी; ई' है 'बी >> = (\ ए -> डी >> = (\ सी -> ई))'। – sdcvvc
@ एसडीसीवीवीसी: धन्यवाद, यह वास्तव में मेरे भ्रम का स्रोत था। – kahoon
ध्यान दें कि यह "शायद मोनैड बाइंड फ़ंक्शन प्राथमिकता" नहीं है; अलग-अलग टाइपक्लास उदाहरणों के लिए आपके पास अलग-अलग प्राथमिकताएं नहीं हो सकती हैं, इसलिए * सभी * मोनैड्स बाइंडों के लिए यह प्राथमिकता होनी चाहिए। – Ashe