यह मूर्खतापूर्ण लगता है, लेकिन मुझे यह नहीं मिल रहा है। अभिव्यक्ति [] == [] क्यों टाइप की जा सकती है? अधिक विशेष रूप से, किस प्रकार (कक्षा ईक में) सूची तत्वों के प्रकार से अनुमानित है?`([] ==) []` अनुमानित हैकेल का प्रकार कैसा है?
Prelude> :t (==[])
(==[]) :: (Eq [a]) => [a] -> Bool
लेकिन बाधा Eq [a]
भी Eq a
का तात्पर्य, के रूप में यहाँ दिखाया गया है:
Prelude> (==[]) ([]::[IO()])
<interactive>:1:1:
No instance for (Eq (IO()))
arising from use of `==' at <interactive>:1:1-2
Probable fix: add an instance declaration for (Eq (IO()))
In the definition of `it': it = (== []) ([] :: [IO()])
इस प्रकार [] == [] में,
एक GHCi सत्र में, मैं निम्न देखें , टाइप चेकर को यह मानना चाहिए कि सूची तत्व कुछ प्रकार है जो क्लास ईक में है। पर कौनसा? [] का प्रकार सिर्फ [ए] है, और यह निश्चित रूप से ईक ए => [ए] से अधिक सामान्य है।
IMHO इस करना चाहिए अस्पष्ट, कम से कम हास्केल 98 (जो कि हम क्या बात कर रहे हैं)
मैं बाधा में 'अस्पष्ट प्रकार चर \' एक 'मिल गया है \ '== '' – kennytm
@ केनी के उपयोग से उत्पन्न होने वाला एक' एक '- हां, जो मैंने ghci में कोशिश करने से पहले अपेक्षित था - मेरा आश्चर्य जितना बड़ा होगा। धन्यवाद संकेत के लिए, अब मेरी विश्व व्यवस्था बहाल है :) – Ingo
यह दिलचस्प हग्स अभिव्यक्ति '[] == []' 'प्रकार Eq एक => Bool' देता है। – sdcvvc