OCaml

2013-03-28 6 views
10

पर निर्भर प्रकार Haskell और Scala में निर्भर प्रकारों के बारे में बहुत सारी जानकारी है। ओकैमल के लिए, इतना नहीं। क्या कोई ओकैम में इसे प्राप्त करने के तरीके पर कोडिंग उदाहरण प्रदान करने के लिए पर्याप्त कुशल है (यदि यह संभव है तो)? निश्चित रूप से (छोड़ दिया गया) Dependent ML है, लेकिन ऐसा लगता है कि "नियमित" ओकैमल कोड में ऐसी सामग्री शामिल करना संभव नहीं है।OCaml

असल में, मैं क्या करना चाहता हूं assert(n > 0) जैसे कोड को निकालना और संकलन समय पर जांचें।

संपादित

एक तरफ ध्यान दें के रूप में, यह उल्लेख के OCaml Hybrid Contract Checking शाखा के लायक है, कि एक आश्रित प्रकार प्रणाली की जरूरतों में से कुछ को भरने कर सकते हैं। assert(n > 0) के बजाय आप तो एक अनुबंध लिखते थे:

contract f = {x : x > 0} -> int 
let f x = x + 1 
let dummy_variable = f (-1) (* Won't compile *) 
+2

क्या मैं पूछ सकता हूं कि यह "हास्केल और स्कैला में निर्भर प्रकारों के बारे में बहुत सारी जानकारी" कहां है? हास्केल समुदाय का उचित अवलोकन होने के बावजूद, मुझे नहीं पता कि आप किस चीज का जिक्र कर रहे हैं। (मैं निश्चित रूप से यूपीएएन काम पर निर्भर करता हूं [निर्भर रूप से टाइप किए गए हास्केल] (http://www.cis.upenn.edu/~sweirich/) प्रासंगिक के रूप में, लेकिन यह व्यावहारिक के बजाय बेहद शोधपूर्ण है, और शायद "बहुत" मात्रा में)। मुझे नहीं पता कि आप स्कैला के बारे में क्या सोच रहे हैं - शायद पथ-निर्भर प्रकारों के संबंध में? – gasche

+0

एहम, स्टैक ओवरफ्लो पर, मैं सोच रहा था। शायद मैं Scalas पथ-निर्भर प्रकार से मूर्ख था। –

उत्तर

10

एक संदर्भ लिंक ओलेग के lightweight dependent typing पृष्ठों, उदाहरण के साथ (OCaml में या आप OCaml में अनुवाद कर सकते हैं) एमएल भाषाओं में इस्तेमाल निर्भर की तरह तकनीक के है। 2007 में चुंग-चिह शान के साथ Lighweight static capabilities (PDF) पर उनका पेपर विशेष रूप से प्रासंगिक है।

संपादित करें: संस्करण 4.00 (ऊपर दिए गए दस्तावेज़ के बाद जारी किया गया था) के बाद से, ओकैमल में जीएडीटी है, जो परिष्कृत स्थिर जानकारी (पहले प्रेत प्रकार तकनीकों पर निर्भर) के लिए कुछ तकनीकों को व्यवस्थित करने की अनुमति देता है, विशेष रूप से "सिंगलटन प्रकार" पैटर्न Omega में प्रदर्शित किया गया। यह दिखाया गया है कि वे मजबूत टाइपफुल प्रोग्रामिंग प्राप्त करने के लिए आवश्यक नहीं हैं, लेकिन वे अभी भी जंगली में पाए गए विभिन्न उदाहरणों द्वारा उपयोग किए जा सकते हैं।