मैं Learn You a Haskell for Great Good!
पुस्तक से YesNo
उदाहरण के माध्यम से जाने का प्रयास कर रहा हूं।बाधाओं में अस्पष्ट प्रकार परिवर्तनीय 'a0'
module Main where
main :: IO()
main = putStrLn (show (yesno 12))
class YesNo a where
yesno :: a -> Bool
instance YesNo Bool where
yesno b = b
instance YesNo [a] where
yesno [] = False
yesno _ = True
instance YesNo Int where
yesno 0 = False
yesno _ = True
जब मैं निष्पादित इस कोड को निम्नलिखित अपवाद तब होता है:
Ambiguous type variable `a0' in the constraints:
(YesNo a0) arising from a use of `yesno'
at /Users/mkhadikov/Projects/personal/haskell/hello-world/yesno.hs:5:25-29
(Num a0) arising from the literal `12'
at /Users/mkhadikov/Projects/personal/haskell/hello-world/yesno.hs:5:31-32
Probable fix: add a type signature that fixes these type variable(s)
In the first argument of `show', namely `(yesno 12)'
In the first argument of `putStrLn', namely `(show (yesno 12))'
In the expression: putStrLn (show (yesno 12))
आप कृपया समझा सकते हैं कि इस कोड के साथ गलत क्या है
यहाँ मेरी स्रोत कोड है?
यह डेटा कंस्ट्रक्टर्स कि हास्केल में '12' की तरह काम की अपनी तरह बनाने के लिए संभव है? ऐसा लगता है कि जब भी आप एक डेटा कंस्ट्रक्टर बनाते हैं, तो यह एक प्रकार का मान बनाता है। लेकिन जब आप '12' लिखते हैं, जैसा कि आप देख सकते हैं कि यह एक प्रकार का मान नहीं है, लेकिन किसी भी प्रकार का मान जहां संख्या नम द्वारा बाधित है। इस प्रकार 'संख्या एक => ए'। क्या मैं इसे सही तरीके से समझ रहा हूं? क्या इस तरह का एक मूल्य बनाने की तरह है जिसमें अस्तित्व/संघ है? – CMCDragonkai
@CMCDragonkai मैं विवरण पर थोड़ा अस्पष्ट हूं लेकिन मूल रूप से टाइपक्लास 'न्यू' में एक फ़ंक्शन 'इंटेगर :: न्यू ए => इंटीजर -> ए' है। एक संख्यात्मक शाब्दिक काम जैसे कि 'से इंटेगर' को बुलाया गया था। – fuz
आह, इसलिए 'ए' एक अस्तित्व/संघ बन गया है। बहुत ही रोचक। – CMCDragonkai