2011-11-02 10 views
5

1) मैं एक खुली संघ इस प्रकार परिभाषित किया गया है:प्रकार परिभाषाओं

type 'a choice = [> `One | `Other ] as 'a 

मैं तो एक प्रकार choice_list परिभाषित करने की कोशिश:

type choice_list = choice list 

जो काम नहीं करता। कैसे एक प्रकार को परिभाषित करता है जहां एक या अधिक घटक खुले यूनियन हैं?

2) के बजाय मैं choice_list प्रकार बनाने छोड़, और सिर्फ एक choice list उपयोग करते हैं, जब मैं एक अंतरफलक/हस्ताक्षर बयान एक विकल्प सूची का उपयोग कर लिखने का प्रयास करें,

val choice_handler : choice list -> int 

संकलक शिकायत है कि type 'a choice = 'a constraint 'a = [> `One | `Other ] is not included in type infection_state. They have different arities हैं।

मेरा सवाल यह है कि, इंटरफ़ेस/हस्ताक्षर में पसंद सूची की प्रकार की घोषणा कैसे लिखती है।

उत्तर

9

कंपाइलर आपको यह बताने की कोशिश कर रहा है कि choice एक पैरामीटरयुक्त प्रकार है। प्रकार के स्तर पर, इसकी एक आकृति है 1. दूसरे शब्दों में, आपको एक प्रकार का पैरामीटर प्रदान करने की आवश्यकता है। आप पैरामीटर [`One|`Other] की एक उप-प्रकार होने के लिए विवश किया है, लेकिन अन्य की तुलना में यह है कि यह किसी भी प्रकार के हो सकते हैं:

# ([`One; `Third] : 'a choice list);; 
- : [> `One | `Other | `Third ] choice list = [`One; `Third] 

आप विकल्पों की एक सूची निर्धारित करना चाहते हैं, तो अतिरिक्त प्रकार कहीं से आया है।

# type 'a choice_list = 'a choice list;; 
type 'a choice_list = 'a choice list constraint 'a = [> `One | `Other ] 

(निर्माणों की इन प्रकार, मुश्किल बहुत तेजी से मिलता है मेरे अनुभव में।)

: अर्थात, उसे नए प्रकार के लिए एक पैरामीटर हो गया है
संबंधित मुद्दे