https://github.com/hemanth/functional-programming-jargon में स्पष्टीकरण दुर्भाग्य से बहुत सटीक नहीं है।
एक उठाई functor वास्तव में एक functor F
एक समारोह of
हर प्रकारa
के लिए परिभाषित है, और प्रकार F a
के एक मूल्य of(x)
में प्रकार a
के एक मूल्य x
भेजने के साथ एक साथ है। Hindley-Milner signature में यह इस तरह दिखता है:
of :: a -> F a
उदाहरण के लिए, सरणी functor, of = x => [x]
साथ दिखाया गया है किसी भी प्रकार a
के हर मूल्य x
के लिए परिभाषित किया।
इसके अलावा, समारोह of
(या अधिक सटीक, कार्यों of
के संग्रह के रूप में आप प्रत्येक प्रकार a
के लिए एक है) पहचान functor से एक प्राकृतिक परिवर्तन F
में होना चाहिए। इसका मतलब है कि एक समारोह के मूल्य के बराबर होती है of
तर्क एक ही समारोह की मैप किया गया की of
:
of(f(x)) === of(x).map(f)
उदाहरण के लिए, सरणी उदाहरण में आप
[f(x)] === [x].map(f),
तो x => [x]
वास्तव में एक प्राकृतिक परिवर्तन है।
लेकिन क्या आप भी
of = x => [x, x]
[f(x), f(x)] === [x, x].map(f)
जो एक और उठाई functor है, भले ही functor के map
ही रहता है ले जा सकते हैं। (ध्यान दें कि प्रत्येक मामले में, आपको केवल of(x)
के मान के रूप में बहुत विशेष सरणी मिलती हैं।)
हालांकि, आप उदाहरण नहीं ले सकते
of = x => [x, 0]
[f(x), 0] !== [x, 0].map(f)
अब
var grid = Grid.of({ width: 2, height: 2, list: [1, 2, 3, 4] })
पूरी तरह से ठीक है और देता है अपने वस्तु Grid
में लपेटा पारित। फिर आप अपने grid
को सादे ऑब्जेक्ट्स से सादे ऑब्जेक्ट्स में किसी भी नियमित फ़ंक्शन f
के साथ मैप कर सकते हैं और परिणाम प्राकृतिक परिवर्तन कानून के कारण f
लागू करने और Grid
में लपेटने जैसा ही होगा। ध्यान दें कि इस तरह आप Grid.of
को Grid.of(2)
के Grid.of({width: 2})
जैसे किसी भी अन्य मूल्य के साथ भी कॉल कर सकते हैं। वैकल्पिक रूप से, आप उन प्रकारों को प्रतिबंधित कर सकते हैं जिनके लिए Grid.of
परिभाषित किया गया है, तो मान केवल उस प्रकार का होना चाहिए जो आप अनुमति देते हैं।
यह एक थोड़ा मुश्किल है:
Grid.of(2, 2, [1, 2, 3, 4])
यह कई तर्क पर लागू होता है Grid.of
।चूंकि Grid.of
परिभाषा के अनुसार केवल एक तर्क का कार्य है, परिणाम Grid.of(2)
होगा, जो आप जो चाहते हैं वह हो सकता है। क्या तुम सच में सभी मूल्यों को खिलाने के लिए चाहते हैं, तो आप शायद आप आंतरिक एक सरणी में उन्हें पूर्व लपेटकर और उसके बाद Grid.of
लगाने से कई तर्कों को Grid.of
विस्तार कर सकते हैं
Grid.of([2, 2, [1, 2, 3, 4]])
वैकल्पिक रूप से लिखना चाहते हैं,। यह वास्तव में इस बात पर निर्भर करता है कि आप क्या कर रहे हैं।
वास्तविक दुनिया उपयोग उदाहरण के लिए, उदाहरण देखें here जहां एक "उबाऊ" कार्य को सादा मूल्य से Task.of
के माध्यम से परिभाषित किया गया है। दूसरी तरफ here एक और दिलचस्प कार्य है जो एक फ़ंक्शन को लपेटता है जिसे आप Task.of
के साथ नहीं प्राप्त करेंगे। हालांकि महत्वपूर्ण बात यह है कि दोनों उदाहरणों पर दिखाए गए अनुसार समान कार्य इंटरफ़ेस के साथ दोनों कार्य का उपयोग किया जा सकता है।
यह भी ध्यान दें कि इन उदाहरणों में कोई भी आवेदक फ़ैक्टर का उपयोग नहीं किया जाता है, इसलिए अभी भी आवेदक के बिना पॉइंट किए गए फ़ैक्टर का उपयोग किया जाता है।
'Foo.of' क्या है? क्या आपका मतलब Array.of? मैंने सोचा, एएस2015 के रूप में, केवल ऐरे और * टाइपेडअरे * में ' –
था और आपका अपेक्षित आउटपुट क्या है? काफी तुम्हारा मुद्दा नहीं मिला। – Leo
कृपया अपने इनपुट डेटा का एक उदाहरण दें, और अपेक्षित परिणामस्वरूप सरणी सामग्री - जैसा कि यह खड़ा है, आपने मुझे 'Foo' –