आप कह रहे हैं toFloat
Floating
टाइपक्लास से संबंधित किसी भी प्रकार को वापस कर सकता है लेकिन आप इसे Float
पर प्रतिबंधित कर रहे हैं, जो गलत है। आपका फ़ंक्शन a
में पॉलीमोर्फिक है, इसलिए आप Floating
का उदाहरण वापस नहीं कर सकते हैं, यह सभी उदाहरणों के साथ काम करने में सक्षम होना चाहिए।
otherway आप द्वारा
toFloat :: (Read a,Floating a) => String -> a
toFloat s = read s
इस बात को समझ सकते हैं GHCi
*Main> :t toFloat "12.1"
toFloat "12.1" :: (Floating a, Read a) => a
*Main> :t (toFloat "12.1" :: Float)
(toFloat "12.1" :: Float) :: Float
*Main> :t (toFloat "12.1" :: Double)
(toFloat "12.1" :: Double) :: Double
चूंकि यह रिटर्न प्रकार Floating
typeclass से संबंधित आप किसी भी प्रकार के (Floating
का होता है) करने के लिए इसे बदलने के लिए सक्षम होना चाहिए में फ़ंक्शन के बाद स्पष्ट प्रकार के हस्ताक्षर प्रदान किए जाते हैं। दूसरी ओर जब आप स्पष्ट रूप से Float
लौट रहे हैं तो अपने मामले को याद रखें, अब आप यह नहीं कह सकते कि मैं इस फ़ंक्शन से Double
की अपेक्षा करता हूं क्योंकि यह स्पष्ट रूपांतरण के बिना नहीं हो सकता है।
एक और तरीका है समझने के लिए कैसे भयानक अपने धारणा समारोह पर विचार read
read :: Read a => String -> a
अब यहाँ आप के अनुसार, तुम बस लौट सकते हैं सब कुछ के लिए कहते हैं कि Int
क्योंकि Int
Read
के लिए एक उदाहरण है। अब आप समझ सकते हैं अगर आप की तरह
read "12" + (1.2 :: Double)
त्वरित प्रतिक्रिया के लिए धन्यवाद। यह मेरे लिए पूरी तरह से मुद्दे को स्पष्ट करता है। किसी भी तरह से यह मेरे लिए क्लिक नहीं किया गया कि मेरे फ़ंक्शन के कॉलर मेरे टाइपक्लास के विशिष्ट उदाहरण के लिए पूछ सकते हैं। – nottombrown