datatype
घोषणाओं में, मानक एमएल समानता प्रकार का उत्पादन करेगा यदि सभी प्रकार के सभी प्रकार के तर्क स्वयं eqtype
एस हैं।एसएमएल प्रकार को रचनाकारों को छुपाए बिना eqtype बनने से रोकें
मैं उन की अक्षमता समानता के लिए अपने स्वयं के परिभाषा प्रदान और अपने स्वयं के eqtypes और एसएमएल नियमों के अप्रत्याशित परिणाम (निर्माण करने के लिए रोना रोते कुछ स्थानों में टिप्पणी देखा है जैसे नंगे ref
और array
रों eqtypes हैं, लेकिन datatype Foo = Foo of (real ref)
एक eqtype नहीं है)।
स्रोत: http://mlton.org/PolymorphicEquality
एक है क्योंकि एक रेफरी सेल पर सूचक तुलना पर्याप्त होगा, प्रकार वास्तविक टी के दो मानों की तुलना करने में सक्षम होने की उम्मीद कर सकते हैं। दुर्भाग्यवश, टाइप सिस्टम केवल यह व्यक्त कर सकता है कि उपयोगकर्ता द्वारा परिभाषित डेटाटाइप समानता स्वीकार करता है या नहीं।
मुझे आश्चर्य है कि ब्लॉक eqtyping संभव है या नहीं। उदाहरण के लिए, मैं एक बाइनरी पेड़ (एक अनावश्यक संस्करण के साथ) के रूप में एक सेट को कार्यान्वित कर रहा हूं और मैं संरचनात्मक रूप से एक दूसरे के साथ सेट की तुलना करने की क्षमता को प्रतिज्ञा करना चाहता हूं।
datatype 'a set = EmptySet | SetLeaf of 'a | SetNode of 'a * 'a set * 'a set;
कहो मैं लोगों को =
साथ SetLeaf(5)
और SetNode(5, EmptySet, EmptySet)
भेद करने के बाद से यह एक अमूर्त तोड़ने आपरेशन है में सक्षम हो नहीं करना चाहती।
मैं datatype on = On | Off
साथ एक सरल उदाहरण की कोशिश की सिर्फ अगर मैं एक गैर eqtype हस्ताक्षर का उपयोग करने के प्रकार अवनत आ सकती हैं।
(* attempt to hide the "eq"-ness of eqtype *)
signature S = sig
type on
val foo : on
end
(* opaque transcription to kill eqtypeness *)
structure X :> S = struct
datatype on = On | Off
let foo = On
end
ऐसा लगता है कि पारदर्शी जोड़ना एक eqtype बनने से X.on
को रोकने के लिए विफल रहता है, लेकिन अपारदर्शी जोड़ना इसे रोक नहीं करता है। हालांकि, ये समाधान आदर्श नहीं हैं क्योंकि वे एक नया मॉड्यूल पेश करते हैं और डेटा कन्स्ट्रक्टर को छुपाते हैं। कस्टम प्रकार या टाइपर को eqtype
बनने या अपने डेटा कन्स्ट्रक्टर को छुपाए बिना या नए मॉड्यूल पेश किए बिना समानता को स्वीकार करने का कोई तरीका है?
आरई। 'बार 'मामला, मेरी गलती। एसएमएल/एनजे ने 'डेटाटाइप' को आपके द्वारा वर्णित एक बार 'मामले को खारिज कर दिया है, लेकिन 'डेटाटाइप फू = फू (असली रेफरी)' मामले में, इस मामले में मैंने शुरुआत में सवाल किया था कि यह 'पॉलीक्वाल' को कॉल करने के बारे में एक बुरा चेतावनी छोड़ देता है। –