मैंने हास्केल के साथ प्रयोग करना शुरू कर दिया है और समस्या है। qqq एक ऐसा फ़ंक्शन है जिसे "कुछ भी नहीं" कहा जाता है और "बस कुछ" के साथ बुलाए जाने पर अन्य चीजों को प्रिंट करने के लिए एक स्ट्रिंग मुद्रित करनी चाहिए।हास्केल के "शायद" का उपयोग करके, घोषणाएं टाइप करें [शुरुआती प्रश्न]
qqq Nothing = print "There isn't anything to be printed."
qqq (Just x) = print "There is something to be printed." >> print x
main :: IO()
main = qqq (Just 43)
लेकिन:
पहला प्रयास काम करने की तरह लगता है
- जब मैं
main = qqq (Nothing)
यह विफल करने की कोशिश ("अस्पष्ट प्रकार चर` a0 'बाधा में: (दिखाएँ a0) 'QQQ' ") की एक उपयोग से उत्पन्न होने - विफल रहता है अगर मैं प्रकार हस्ताक्षर जोड़ने के लिए चाहते हैं:
-
qqq :: Maybe x => x -> IO()
->Type constructor 'Maybe' used as a class
-> लेकिन है ना?
-
qqq :: (Maybe x) -> IO()
। अब हस्ताक्षर खुद सफल होने जैसा दिखता है। लेकिनmain = qqq (Just 43)
main = qqq (Nothing)
मामले में उस रहस्यमय(Show a0)
त्रुटि के साथ विफल होने लगते हैं।
सवाल:
- क्यों
Nothing
साथ QQQ बुलाJust 43
साथ बुला से क्यों भिन्न है? (Show a0)
क्या है? यह केवल त्रुटि संदेशों में उल्लेख किया गया है। इसका उपयोग करने के किसी भी प्रयास से "दायरे में न दिखाएं" जैसी कुछ चीजें होती हैं।- इसके लिए सही प्रकार का हस्ताक्षर क्या है? Haskell प्रिंट प्रकार हस्ताक्षर कैसे इसे कम करने के लिए? कुछ उम्मीद की तरह:
f 0 = 2
f x = (f (x-1)) + 3
main = print get_type_as_string(f)
-- prints "Number -> Number"
ने गैर-पूछे जाने वाले प्रश्न का उत्तर दिया, "मैं ghci में कुछ भी क्यों सेट नहीं कर सकता, यह '='' –
पर 'पार्स त्रुटि' की शिकायत करता है क्या "संदिग्ध प्रकार" हमेशा हास्केल में विफल रहता है या यह "प्रकार" तय कर सकता है यहाँ कोई फर्क पड़ता है, तो कभी-कभी अस्पष्ट होना चाहिए "कभी-कभी? –
हास्केल संदिग्ध प्रकार की शिकायत करता है जब संकलक को नहीं पता कि क्या करना है। तो यदि संकलक यह पता लगा सकता है कि किस प्रकार का कोई समस्या नहीं है, लेकिन यदि इस प्रकार के बारे में पर्याप्त जानकारी के बिना इस प्रकार का अनुमान लगाया जाना चाहिए तो आपको त्रुटि मिल जाएगी। – Antti