2012-01-26 8 views
8

समय में, मैं "सुविधा" है कि हास्केल केवल उदाहरण सिर से मेल खाता है, अर्थात् में चलाने,क्या कोई भाषा एक्सटेंशन या हास्केल की भाषा वंशज हैं, जो अभिव्यक्ति का पक्ष लेते हैं, खासकर उदाहरण में हैंडलिंग?

instance (a ~ NewDataTyp b) => C a 

अब किसी भी प्रकार से मेल खाएगी, अपने कार्यक्रम में C का एक और उदाहरण घोषणा लेखन यानी होगा एक त्रुटि है, भले ही संभवतः संदर्भ a ~ NewDataTyp b के कारण संघर्ष नहीं कर सकता है। कभी-कभी, इसे दूर करने के लिए बहुत मेहनत होती है; इस सीमा से बचने के लिए मुझे कोड की सैकड़ों लाइनों को पुन: स्थापित करना पड़ा है।

क्या कोई भाषा एक्सटेंशन, या वंशज भाषाएं हैं (करी? आगाडा?) जो अभिव्यक्ति के लिए उच्च प्राथमिकता के साथ डिज़ाइन की गई हैं? यह संभवतः टाइपक्लास दुनिया (बी) बहुपद समय टाइपकेकिंग की खुलीपन (ए) बलिदान कर सकता है।

संपादित - सवाल में रुचि रखने वालों के लिए, यह पेज भी ब्याज की हो सकती है: http://www.haskell.org/haskellwiki/Future_of_Haskell

+2

खुली दुनिया धारणा निकाला जा रहा है की ओर जाता है [और अधिक समस्याओं से आप उम्मीद कर सकते] (http://stackoverflow.com/questions/8728596/explicitly-import-instances/8731340#8731340)। जहां तक ​​मुझे पता है, उस समस्या से ठीक होने का एकमात्र तरीका पूर्ण निर्भर प्रकारों को जोड़ना है, और 'सेट' प्रकार में 'Ord' उदाहरण का उपयोग करना शामिल है। – ehird

+1

हास्केल प्रकार की जांच बहुपद नहीं है, क्योंकि एचएम प्रकार की जांच (दोगुनी) घातीय है। – augustss

+2

मुझे यकीन नहीं है कि गिरगिट का इतना विस्तार था या नहीं। इसके लिए बैकट्रैकिंग करने के लिए बाधा सॉल्वर की आवश्यकता होती है, लेकिन मुझे कोई कारण नहीं दिखता है कि इसे काम नहीं करना चाहिए। – augustss

उत्तर

1

क्या इसके लायक है के लिए, स्काला क्या तुम सिर्फ लिखा था की अधिक या कम शाब्दिक अनुवाद स्वीकार करता है। मुझे यकीन नहीं है कि यह कितना उपयोगी है।

trait C[T] 
case class NewDataType[T]() 

implicit def letItBeInjectiveWhyNot[K[_],T]: K[T] =:= K[T] 

implicit def cIsh[A,S](implicit ev: A =:= NewDataType[S]): C[A] 
implicit def another: C[Int] 

implicitly[C[NewDataType[String]]] 
implicitly[C[Int]] 
संबंधित मुद्दे