import Data.Monoid
outputList :: Int -> Int -> [Maybe Int]
outputList = mconcat [getRow, getColumn, getBlock]
आप एक स्पष्टीकरण चाहिए।
सबसे पहले, मैं स्पष्ट रूप से ध्यान दूंगा कि इन सभी कार्यों का एक ही प्रकार है।
outputList, getRow, getColumn, getBlock :: Int -> Int -> [Maybe Int]
अब अपनी मूल परिभाषा से शुरू करते हैं।
outputList x y = concat . map ($ y) $ map ($ x) [getRow,getColumn,getBlock]
इन कार्यों एक [Maybe Int]
में परिणाम है, और कुछ भी की एक सूची एक monoid है। सूक्ष्म रूप से सूचियों को जोड़ना सूचियों को संयोजित करने जैसा ही है, इसलिए हम को mconcat
के साथ प्रतिस्थापित कर सकते हैं।
outputList x y = mconcat . map ($ y) $ map ($ x) [getRow,getColumn,getBlock]
एक अन्य चीज जो एक मोनॉयड है, एक कार्य है, यदि इसका परिणाम एक मोनॉयड है। यही है, अगर b
एक मोनॉयड है, तो a -> b
एक मोनॉयड भी है। कार्यों को एकजुट करने के लिए समान पैरामीटर के साथ कार्यों को कॉल करने के समान ही है, फिर परिणामों को एकजुट रूप से संयोजित करना।
तो हम
outputList = mconcat [getRow,getColumn,getBlock]
हम काम हो गया करने के लिए फिर से
outputList x = mconcat $ map ($ x) [getRow,getColumn,getBlock]
को सरल बना सकते हैं और फिर!
Typeclassopedia has a section about monoids है, हालांकि इस मामले में मुझे यकीन है कि नहीं कर रहा हूँ यह documentation for Data.Monoid परे है कि इतना कहते हैं।
वैसे, क्या कोई आंकड़े हैं जब तक हास्केल के बारे में कोई प्रश्न नहीं दिया जाता है? मैं इस धारणा के तहत हूं कि सभी हास्केल सवालों का 9 0 प्रतिशत उत्तर तुरंत उत्तर दिया जाता है। हालांकि यह उत्तर की गुणवत्ता के बारे में कुछ भी नहीं कहता है, मेरी राय में उनके पास काफी उच्च गुणवत्ता है। –
@JanChristiansen: यदि आप चाहें तो स्टैक एक्सचेंज डेटा एक्सप्लोरर का उपयोग करके आप इसका जवाब दे सकते हैं। मैंने बहुत मोटा अनुमान लगाया (स्पष्ट रूप से फ़िल्टर करें, स्वयं जवाबों को अनदेखा करें, और सी।), और सामान्य (यानी, औसत) समय पहले जवाब पोस्ट होने तक लगभग 20 मिनट था। –