मुझे आकार (minBound
, maxBound
) और विभिन्न अभिन्न प्रकारों की "दशमलव प्रतिनिधित्व में लंबाई" की जांच के दौरान कुछ अजीब व्यवहार देखने के लिए हुआ।ghci - डिफॉल्टिंग भ्रम
GHCi का उपयोग करना:
Prelude> :{
Prelude| let mi = minBound
Prelude| ma = maxBound
Prelude| le = fromIntegral $ length $ show ma
Prelude| in [mi,ma,le] :: [Int]
Prelude| :}
[-9223372036854775808,922372036854775807,2]
^
अंतिम स्थान पर रहा
19
उम्मीद करेंगे में
।
मेरा पहला अनुमान है कि ()
करने के लिए maxBound
चूक है और इस तरह की पैदावार 2
है, लेकिन मुझे समझ नहीं आता कि क्योंकि ma
स्पष्ट प्रकार एनोटेशन (:: [Int]
) द्वारा एक Int
होना चाहिए - ma
नामित किया जाना चाहिए सभी प्रतीकों और निर्देशात्मक पारदर्शिता से बराबरी का।
यदि मैं ऊपर दिए गए कथन को फाइल में डालता हूं और इसे जीएचसीआई में लोड करता हूं, तो मुझे सही परिणाम मिलता है।
तो मुझे गलत परिणाम क्यों मिलता है?
मुझे लगता है कि अपने पहले अनुमान बहुत करीब है, 'ma' ' एस प्रकार को तब तक 'Int' होने के लिए तय नहीं किया गया है, इसलिए' le' 'ma :: Bounded a => a' का उपयोग कर रहा है जो शो में '()' के लिए डिफ़ॉल्ट है। यदि आप इसे फिर से 'ma = maxbound :: Int' के साथ करते हैं तो आपको यह देना चाहिए 19. – jkeuhlen
यह कैसे हो सकता है कि प्रकार ठीक नहीं है? – epsilonhalbe
जब आप विपरीत व्यवहार की अपेक्षा करते हैं तो कोई भी व्यवहार भ्रमित हो सकता है। –