2016-05-16 3 views
26

ऐसा लगता है कि हाल के वर्षों तक, एक समारोह के लिए एक अतिरिक्त प्रकार पारित करने के लिए हमेशा की तरहकिसने प्रॉक्सी गुजरने का आविष्कार किया और कब?

f (undefined :: T) 

Kiselyov और शान भी वर्ग आधारित प्रतिबिंब पर उनकी क्लासिक समाचार पत्र में इस दृष्टिकोण का इस्तेमाल किया है कि प्रेरित तरह कुछ करने के लिए था reflection पैकेज। उन्होंने यह ध्यान में रखते हुए स्पष्ट कुरूपता से माफ कर दिया कि फर्जी मूल्य का कभी निरीक्षण नहीं किया जाता है। और Data.Bits.finiteBitSize में केवल थोड़ा ही बदसूरत अवतार दिखाई देता है, जो इसके प्रकार को प्राप्त करने के लिए अनदेखा करता है।

फिर कोई प्रॉक्सी मुहावरे का पता लगाया, और सबकुछ बदल गया। अब हम हमेशा देखना और अधिक संतोषजनक

f (Proxy :: Proxy T) 

(मानक कोड — GHC प्रकार आवेदन में एक और कहानी है)।

किसने इसे समझ लिया? क्या यह पहले कहीं कोड में दिखाई देता था, या एक पेपर?

+5

मैंने पहली बार एडवर्ड के [टैग किए गए] में प्रॉक्सी देखा [http://hackage.haskell.org/package/tagged-0.1.0/docs/Data-Tagged.html) पैकेज, fwiw। यह 0.0 में नहीं था लेकिन 0.1 में था। –

+0

दिलचस्प सवाल।अन्य समाचारों पर, मैंने अभी _history_ टैग टिप्पणी देखी है "प्रोग्रामिंग अवधारणा या सुविधा के इतिहास के बारे में प्रश्नों के लिए इस टैग का उपयोग न करें; वे प्रश्न ऑफ-विषय हैं।" कभी-कभी एसओ नीतियां आश्चर्यजनक होती हैं। (और हाँ, यह टिप्पणी यहां थोड़ा ओटी भी है)। – chi

उत्तर

18

शानदार प्रश्न। अप्रैल 2013 से शुरुआती जीएचसी प्रस्ताव TypeLevelReasoning, libraries धागा "Proxy, new Typeable, and type-level equality" (मूल पोस्टर रिचर्ड ईसेनबर्ग, हाल ही में निर्भर हास्केल काम के पीछे चालक बल) का संदर्भ देता है। वह धागा एक और libraries धागा "Proxy and new-typeable" (मूल पोस्टर शाचाफ बेन-किकी) का संदर्भ देता है, जिसे new-typeable शाखा से पैच के जवाब में शुरू किया गया था। पुरानी शाखा के नामों का रिकॉर्ड ढूंढना मुश्किल है और जो उन्होंने इंगित किया है, लेकिन commit 3d53407 by José Pedro Magalhães उस शाखा का स्क्वैश संस्करण प्रतीत होता है। वास्तव में यह data Proxy t = Proxy प्रकार पेश करने के लिए जीएचसी में पहली प्रतिबद्धता लैंडिंग प्रतीत होता है। बाद में फरवरी 2013 में commit 01aa22b में Eisenberg उस प्रकार को Data.Proxy पर ले जायेगा। Proxy का अंतिम डिज़ाइन कई लोगों के विचारों के सामूहिक संश्लेषण प्रतीत होता है। हालांकि, हम Magalhães के काम में Proxy पर अकादमिक संदर्भ प्राप्त कर सकते हैं, जैसे उनकी प्रस्तुति "The right Kind of Generic Programming" (अक्टूबर 2012) और उनके ब्लॉग पोस्ट "Coming soon in GHC HEAD: poly-kinded Typeable" (नवंबर 2012)। हम शायद उसके आधार पर Proxy को शामिल करने की विशेषता दे सकते हैं।

हालांकि, एक Proxy प्रकार के विचार बहुत पुराना लगता है:

यह यहां है कि मेरी Google खोज सूखी हो जाती है। मुझे उस 2005 के पेपर में एक पूर्ववर्ती प्रतीत नहीं होता है।

कोडा: कि सूत्र में Shachaf के प्रस्ताव, सार्वभौमिक forall proxy a. proxy a का उपयोग करके प्रॉक्सी प्रकार मात्र निर्धारण का (जो आधार पुस्तकालयों अभी भी इस दिन के लिए उपयोग करें) के बजाय forall a. Proxy a ही दिलचस्प है, कि और धागे में अन्य ईमेल के रूप में वहाँ कम से सुझाव है हो सकता है कि एक बिंदु Proxy के कई उदाहरण होस्केल पारिस्थितिक तंत्र के चारों ओर तैर रहा हो। जैसा कि टिप्पणियों में उल्लेख किया गया है, Kmett's tagged library had it back in June 2010

+4

* शानदार * शोध! – dfeuer

+2

यूनिवर्सिटी क्वालिफाइंग प्रॉक्सी उपयोगी है जब पुस्तकालय के उपयोगकर्ता शायद कुछ 'एफ' के लिए पहले से ही 'एफ ए' के ​​कब्जे में हैं। उदाहरण के लिए 'डेटाटाइपनाम :: डेटाटाइप डी => टीडी (एफ :: * -> *) ए -> [चार]' [जेनरिक से] [https://hackage.haskell.org/package/base/docs/GHC- जेनेरिक.html # टी: डेटाटाइप) एक मजाकिया प्रकार का 'डेटाटाइप डी => प्रॉक्सी डी -> [चार]' है जो किसी ऐसे व्यक्ति के लिए सुविधाजनक है जो एक सामान्य प्रतिनिधित्व के 'एम 1 डी डीएफपी' मेटा नोड धारण कर रहा है। – Cirdec

+1

दिलचस्प बात यह है कि लैमेल और जोन्स मानक के रूप में अपनी तकनीक का वर्णन करते हैं। दिलचस्प बात यह है कि यह निश्चित रूप से * आधुनिक प्रॉक्सी तकनीक नहीं है। उनकी 'प्रॉक्सी ए' अस्पष्ट कारणों से निर्वासित है, जो वास्तव में समझदार नहीं लगती हैं। – dfeuer

संबंधित मुद्दे