OCaml में, अनुमानित प्रकार

let f = List.map fst

है

val f : ('_weak1 * '_weak2) list -> '_weak1 list = <fun>

जबकि अनुमानित प्रकार

let g x = List.map fst x

है

val g : ('a * 'b) list -> 'a list = <fun>

(यूटोप से लिए गए प्रकार)।

इसके परिणामस्वरूप, f को बहुरूपी रूप से उपयोग नहीं किया जा सकता, जबकि g कर सकते हैं।

शुद्ध कार्यों के बीच यह ईटा रूपांतरण प्रकार के अनुमान में इतना अंतर क्यों पैदा करता है?

2
zehnpaard 28 जुलाई 2019, 16:36

1 उत्तर

सबसे बढ़िया उत्तर

अंतर मूल्य प्रतिबंध के कारण है, जो पहली परिभाषा को बहुरूपी होने की अनुमति नहीं देता है: यह एक अनुप्रयोग द्वारा परिभाषित किया जाता है, जो एक मूल्य नहीं है। दूसरे रूप को एक फ़ंक्शन के रूप में परिभाषित किया गया है, जो एक मान है। संकेतन '_weakN एक मोनोमोर्फिक प्रकार को इंगित करता है जो अभी तक हल नहीं हुआ है, जैसा कि 'a जैसे बहुरूपी प्रकार के चर के विपरीत है।

अधिक पृष्ठभूमि के लिए यह अध्याय देखें।

5
Andreas Rossberg 28 जुलाई 2019, 18:32