टाइप रैकेट हास्केल से बहुत अलग है। लिस्प और स्कीम में टाइप सिस्टम, और सामान्य रूप से पारंपरिक रूप से अनइंस्टॉल लैंग्वेज इकोसिस्टम में सिस्टम टाइप करते हैं, एक मौलिक लक्ष्य है कि अन्य प्रकार के सिस्टम मौजूदा अनकैप्ड कोड के साथ इंटरऑपरेटिंग न करें । उदाहरण के लिए टाइप रैकेट ने विभिन्न रैकेट मुहावरों को समायोजित करने के लिए पूरे नए टाइपिंग नियम पेश किए। इस समारोह पर विचार करें:
(define (first some-list)
(if (empty? some-list)
#f
(car some-list)))
गैर-रिक्त सूचियों के लिए, यह पहला तत्व देता है। खाली सूचियों के लिए, यह गलत है। अनकैप्ड भाषाओं में यह आम है; टाइप की गई भाषा कुछ आवरण प्रकार का उपयोग करती है जैसे Maybe
कि खाली मामले में कोई त्रुटि। यदि हम इस फ़ंक्शन में एक प्रकार जोड़ना चाहते हैं, तो किस प्रकार का उपयोग किया जाना चाहिए? यह [a] -> a
(हास्केल संकेतन में) नहीं है, क्योंकि यह गलत हो सकता है। यह भी नहीं है [a] -> Either a Boolean
, क्योंकि (1) यह हमेशा खाली मामले में झूठ बोलता है, न कि एक मनमाना बूलियन और (2) एक या तो प्रकार में तत्वों को Left
और झूठे में लपेटता है Right
और आपको वास्तविक तत्व को प्राप्त करने के लिए "दोनों को अनफ्रैप" करने की आवश्यकता होती है। इसके बजाय, मान एक वास्तविक संघ देता है- कोई रैपिंग कंस्ट्रक्टर नहीं है, यह केवल कुछ मामलों में एक प्रकार और अन्य मामलों में एक अन्य प्रकार देता है। टाइप रैकेट में, यह यूनियन प्रकार के निर्माता के साथ दर्शाया गया है:
(: first (All (A) (-> (Listof A) (U A #f))))
(define (first some-list)
(if (empty? some-list)
#f
(car some-list)))
प्रकार (U A #f)
बताता है कि फ़ंक्शन सूची के किसी भी तत्व को वापस कर सकता है या बिना किसी रैपिंग Either
इंस्टेंस के गलत हो सकता है । प्रकार चेकर यह अनुमान लगा सकता है कि some-list
या तो टाइप (Pair A (Listof A))
या खाली सूची है, और इसके साथ ही यह भी है कि यदि कथन की दो शाखाओं में यह ज्ञात है कि इनमें से कौन सा मामला है । प्रकार चेकर जानता है कि (car some-list)
अभिव्यक्ति में, सूची में प्रकार होना चाहिए(Pair A (Listof A))
क्योंकि यदि स्थिति यह सुनिश्चित करती है। इसे घटना टाइपिंग कहा जाता है और इसे अनपेड कोड से टाइप कोड में संक्रमण को कम करने के लिए डिज़ाइन किया गया है।
समस्या पलायन की है। वहाँ एक टन अनपेक्षित रैकेट कोड है, और टाइप रैकेट आपको अपने सभी पसंदीदा अप्रयुक्त पुस्तकालयों को छोड़ने के लिए मजबूर नहीं कर सकता है और यदि आप इसका उपयोग करना चाहते हैं तो अपने कोडबेस में एक महीने को जोड़ने पर खर्च करें। यह समस्या तब लागू होती है जब आपके जोड़ किसी मौजूदा कोडबेस में धीरे-धीरे टाइप होते हैं, टाइपस्क्रिप्ट और इसके किसी भी प्रकार को इन विचारों के जावास्क्रिप्ट अनुप्रयोग के लिए देखें।
एक क्रमिक प्रकार की प्रणाली को सामान्य अप्रचलित मुहावरों से निपटने और मौजूदा अनकैप्ड कोड के साथ बातचीत करने के लिए उपकरण प्रदान करना चाहिए। इसका उपयोग करना काफी दर्दनाक होगा अन्यथा, देखें कि हम क्लोजर उदाहरण के लिए "क्यों हम अब Core.typed का उपयोग नहीं कर रहे हैं" ।