मैं सोच रहा था कि Functor
हास्केल में उदाहरण फ़ैक्टर कानूनों द्वारा निर्धारित (विशिष्ट रूप से) हैं।क्या फ़ंक्चर अद्वितीय हैं?
ghc
कम से कम "रन-ऑफ-द-मिल" डेटा प्रकारों के लिए Functor
उदाहरण प्राप्त कर सकते हैं, ऐसा लगता है कि वे कम से कम विभिन्न मामलों में अद्वितीय होना चाहिए।
सुविधा के लिए, Functor
परिभाषा और functor कानून हैं:
class Functor f where
fmap :: (a -> b) -> f a -> f b
fmap id = id
fmap (g . h) = (fmap g) . (fmap h)
सवाल:
एक धारणा से शुरू
map
की परिभाषा प्राप्त कर सकते हैं कि यहdata List a = Nil | Cons a (List a)
के लिए एक उदाहरण हैFunctor
? यदि हां, तो ऐसा करने के लिए क्या धारणाएं की जानी चाहिए?क्या कोई हैस्केल डेटा प्रकार है जिसमें एक से अधिक
Functor
उदाहरण हैं जो मज़ेदार कानूनों को पूरा करते हैं?ghc
functor
उदाहरण कब प्राप्त कर सकता है और यह कब नहीं हो सकता है?क्या यह सब निर्भर करता है कि हम समानता को कैसे परिभाषित करते हैं?
Functor
कानूनों की समानता के संदर्भ में कानून व्यक्त किए जाते हैं, फिर भी हमेंFunctors
की आवश्यकता नहीं हैEq
उदाहरण हैं। तो क्या यहां कुछ विकल्प है?
समानता के बारे में, निश्चित रूप से मैं क्या "निर्माता समानता" जो हमें कारण है कि [a,a,a]
किसी भी प्रकार की a
के किसी भी मूल्य के लिए "बराबर" [a,a,a]
भले ही a
नहीं है की अनुमति देता है फोन की एक धारणा है (==)
इसके लिए परिभाषित किया गया। समानता के सभी अन्य (उपयोगी) विचार शायद इस समकक्ष संबंध हैं। लेकिन मुझे संदेह है कि Functor
कानूनों में समानता एक "तर्कसंगत समानता" संबंध से अधिक है और आवेदन विशिष्ट हो सकती है। इस पर कोई विचार?
'या तो एक बी' दो तरीकों से एक मजेदार हो सकता है। तो '(ए, बी)' ... वे दोनों छोटे उदाहरण हैं लेकिन मुझे लगता है कि यह सवाल से बाहर नहीं है कि कुछ गैर-तुच्छ वाले होंगे। –
@poorsod नहीं, यह लागू नहीं करने के लिए एकमात्र तरीका है, इसे 'राइट' के मूल्य पर 'f' लागू करना है अन्यथा नोप – jozefg
@jozefg आप सही हैं - मुझे लगता है कि यह घर्षण का एक बिंदु है _ हास्केल टाइपक्लास_ 'फंक्टर' और _mathematical thing_ 'functor'। –