मैं हास्केल के लिए नया हूं और "असीमित प्रकार का निर्माण नहीं कर सकता" त्रुटि का सामना कर रहा हूं जिसे मैं समझ नहीं सकता।यह हास्केल कोड "अनंत प्रकार" त्रुटि का उत्पादन क्यों करता है?
असल में, इससे परे, मैं इस त्रुटि का क्या अर्थ है, इस बारे में अच्छी व्याख्या नहीं पा रहा हूं, इसलिए यदि आप मेरे मूल प्रश्न से परे जा सकते हैं और "अनंत प्रकार" त्रुटि की व्याख्या कर सकते हैं, तो मैं वास्तव में सराहना करता हूं यह।
कोड यह रहा:
intersperse :: a -> [[a]] -> [a]
-- intersperse '*' ["foo","bar","baz","quux"]
-- should produce the following:
-- "foo*bar*baz*quux"
-- intersperse -99 [ [1,2,3],[4,5,6],[7,8,9]]
-- should produce the following:
-- [1,2,3,-99,4,5,6,-99,7,8,9]
intersperse _ [] = []
intersperse _ [x] = x
intersperse s (x:y:xs) = x:s:y:intersperse s xs
और यहाँ दुभाषिया में लोड करने का प्रयास त्रुटि है:
Prelude> :load ./chapter.3.ending.real.world.haskell.exercises.hs
[1 of 1] Compiling Main (chapter.3.ending.real.world.haskell.exercises.hs, interpreted)
chapter.3.ending.real.world.haskell.exercises.hs:147:0:
Occurs check: cannot construct the infinite type: a = [a]
When generalising the type(s) for `intersperse'
Failed, modules loaded: none.
धन्यवाद।
सही कोड
intersperse _ [] = []
intersperse _ [x] = x
intersperse s (x:xs) = x ++ s:intersperse s xs
क्या: -
यहाँ कुछ कोड और हास्केल में "अनंत प्रकार" त्रुटि से निपटने के लिए एक सामान्य दिशानिर्देश को सही है समस्या थी:
मेरा प्रकार हस्ताक्षर राज्य एस है कि intersperse का दूसरा पैरामीटर सूचियों की सूची है। इसलिए, जब मैं "एस (एक्स: वाई: एक्सएस)" के खिलाफ मिलान करता हूं, तो एक्स और वाई सूचीबद्ध करता है। और फिर भी मैं x और y को तत्वों के रूप में देख रहा था, सूची नहीं। "अनंत प्रकार" त्रुटि से निपटने के लिए
दिशानिर्देश:
अधिकांश समय, जब आप इस त्रुटि मिलती है, आप विभिन्न चर आप साथ काम कर रहे के प्रकार को भूल गए हैं, और आप एक चर का उपयोग करने का प्रयास किया है जैसे कि यह किसी अन्य प्रकार की तुलना में था। ध्यान से देखें कि किस प्रकार का सब कुछ बनाम है कि आप इसका उपयोग कैसे कर रहे हैं, और यह आमतौर पर समस्या को उजागर करेगा।
एक और अच्छी युक्ति: प्रकारों को स्पष्ट रूप से घोषित करें। यह संकलक को जांचने के लिए कुछ देता है। –
तो यह समस्या हल करता है, लेकिन संकलक क्यों कहते हैं "अनंत प्रकार का निर्माण नहीं कर सकता?"। इसका क्या मतलब है? यदि समस्या यह है कि आप उन परिचालनों का संचालन करने की कोशिश कर रहे हैं जो उन परिचालनों का समर्थन नहीं करते हैं, तो संकलक ऐसा कुछ क्यों नहीं कहता है? प्रश्न की संरचना के लिए – freedrull
+1 (प्रश्न - सही - समस्या थी - दिशानिर्देश) – Dacav