2013-08-05 4 views
13

जब आप type के साथ एक प्रकार का समानार्थी बनाते हैं, तो जब भी इसका स्पष्ट रूप से उपयोग किया जाता है, तो ghc/ghci मूल प्रकार के बजाय इसका उपयोग करेगा, लेकिन कभी भी अनुमानित समानार्थी से अनुमानित प्रकार से काम करने का प्रयास नहीं करेगा। एक प्रकार के लिए सबसे अधिक "अमूर्त" समानार्थी प्राप्त करना जटिल अनुप्रयोगों और पुस्तकालयों को सीखने के लिए बहुत आसान होगा, जो मोनैड स्टैक्स के लिए समानार्थी परिभाषित करते हैं और संभवतः समानार्थी के समानार्थी शब्द परिभाषित करते हैं।हैकेल में समानार्थी शब्द को हल करने का कोई तरीका है?

क्या किसी ने कभी भी कोड का एक टुकड़ा लिखा है? मुझे लगता है कि यह बैकट्रैकिंग होगा और यह कुछ नकली उम्मीदवार भी उत्पन्न करेगा (उदाहरण के लिए यदि दो प्रकार स्ट्रिंग के उपनाम हैं, तो जब भी स्ट्रिंग को हल किया जाना चाहिए तो वे दोनों उम्मीदवार होंगे), लेकिन यह कुछ स्थितियों में उपयोगी हो सकता है।

+0

मैं एक ही विचार के साथ चारों ओर घूम रहा हूं, क्योंकि यह वास्तव में 'पाइप' और 'लेंस' के लिए उपयोगी होगा। आदर्श रूप में आप कुछ प्रकार के कंपाइलर प्रगामा निर्दिष्ट करेंगे जो एक नियम की तरह कार्य करता है, अनुमानित प्रकार में एक पैटर्न से मेल खाता है और समकक्ष प्रकार समानार्थी को पुनः लिखता है (यदि कई मिलान होते हैं तो कुछ प्रकार की प्राथमिकता के साथ)। –

+1

मुझे कुछ दिनों पहले पढ़ने वाले ब्लॉग पोस्ट की याद दिलाई गई है, जिसमें "चतुलू के प्रकार हस्ताक्षर" का उल्लेख किया गया है: http://joelt.io/entries/yesod-in-production – BruceBerry

+0

यह किसी जीएसओसी या इसी तरह के – jozefg

उत्तर

1

कोई जवाब नहीं, लेकिन एक सवाल है। समानार्थी शब्द का प्रयोग अक्सर "उच्च स्तरीय कोड" में अच्छी तरह से नाम प्रकारों के लिए किया जाता है, लेकिन जैसे ही आप उन प्रकारों को निम्न स्तर/सहायक कोड (जिन्हें अधिक ठोस प्रकारों के संदर्भ में परिभाषित किया जाता है) में पास करते हैं, सिस्टम को किस प्रकार ट्रैक रखना चाहिए समानार्थी लागू होता है? पर विचार करें:

type Title = String 
type Name = String 

capitalise :: String -> String 

my_title = "Mayor" :: Title 

shouted_title = capitalise my_title :: ??? 

typechecker कैसे पता है कि स्ट्रिंग heleper समारोह में जा रहा capitalise धारणात्मक स्ट्रिंग capitalise से बाहर आने के रूप में एक ही प्रकार है? एकाधिक प्रकार के उपनामों की उपस्थिति में, टाइप चेकर का चयन किस प्रकार करना चाहिए?

0

फ्रीज कंपाइलर, आईडीई और आरपीएल इस प्रकार के अनुप्रयोगों ((>) के अनुप्रयोगों को छोड़कर) करने के लिए प्रयास करते हैं, जब उन्हें "अच्छे" प्रकार दिखाने के लिए कहा जाता है, और यह ज्यादातर मामलों में काम करता है। यहाँ एक उदाहरण online session टुकड़ा है:

frege> type Flubber = (Int, Double) 
frege> x = (42, 3.0) 
frege> :t x  
Flubber 
frege> y = [x,x,x,x] 
frege> :t y 
[Flubber] 

तो, सिद्धांत रूप में, यह भी हास्केल में काम करना चाहिए (शायद हास्केल 2010 के प्रकार प्रणाली रिश्तेदार में कुछ एक्सटेंशन सापेक्ष)।

ध्यान रखें, जैसा कि - थॉमस ने अपने उत्तर में बताया - प्रकार के उपनामों को असंतुलित करने के कई तरीके हो सकते हैं और इसलिए आउटपुट वास्तव में भ्रामक हो सकता है।

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