मैं LYAH के माध्यम से पढ़ रहा हूं, और अध्याय 9 में, मुझे एक जिज्ञासा समस्या मिली। लेखक "रैंडोम्स" फ़ंक्शन को लागू करने का एक उदाहरण प्रदान करता है:हास्केल: "रैंडम्स" लागू करें (ए.के.ए., अस्पष्ट प्रकार परिवर्तनीय)
randoms' :: (RandomGen g, Random a) => g -> [a]
randoms' gen = let (value, newGen) = random gen in value:randoms' newGen
अच्छा, यह ठीक है। लेकिन अगर मैं करने के लिए दूसरी पंक्ति बदलने के लिए: लोड हो रहा है पर
randoms' gen = (fst (random gen)) : (randoms' (snd (random gen)))
इस फाइल को रिपोर्ट त्रुटि:
IOlesson.hs:4:52:
Ambiguous type variable `a' in the constraint:
`Random a' arising from a use of `random' at IOlesson.hs:4:52-61
Probable fix: add a type signature that fixes these type variable(s)
Failed, modules loaded: none.
अगर मैं इस लाइन को बदलने के लिए:
randoms' gen = (fst (random gen)) : (randoms' gen)
तो यह सिर्फ क्या करेंगे ठीक है, और उम्मीद के अनुसार, यह सभी समान तत्वों की एक सूची वापस कर देगा।
मुझे परेशान है: मिरन के संस्करण और मेरे संस्करण में इतना अलग क्या है?
किसी भी विचार के लिए धन्यवाद!
धन्यवाद! यह इतना काउंटर अंतर्ज्ञानी है, फिर भी पूरी तरह समझ में आता है। –
आपका स्वागत है; टाइपक्लास अस्पष्टता त्रुटियां पहली बार मुश्किल हो सकती हैं, लेकिन आपको जल्द ही उन्हें लटका देना चाहिए :) – ehird