मैं एक विधि के साथ एक टाइपकास्ट आकार बनाना चाहता हूं, जो एक मान देता है की संख्या इस मान में निर्माता।
class Size a where
size :: a -> Int
instance Size Int where
size a = 1
instance Size Bool where
size b = 1
instance Size (c,d) where
size (c,d) = 1 + Size c + Size d
example4 :: (Bool,(Int,Bool))
example4 = (True,(3,False))
main :: IO ()
main = do
print (size example4)
यह मुझे मान 5 देना चाहिए लेकिन मुझे त्रुटि संदेश मिलता है Not in scope: data constructor `Size"
.
मैं उपयोग करना चाहता हूँ Size Int
या Size Bool
में Size(c,d)
उदाहरण, लेकिन पता नहीं कैसे है।
मेरी समस्या यह है कि मैं नहीं जानता कि मैं इसे कैसे ठीक कर सकता हूं, क्योंकि मैं हास्केल के लिए काफी नया हूं।
उत्तर:
उत्तर № 1 के लिए 4आपने एक टाइपो बनाया:
size (c,d) = 1 + size c + size d
ध्यान दें Size
एक डेटा कंस्ट्रक्टर के रूप में सोचा जाता है क्योंकि इसमें पूंजी एस है। आपको जो चाहिए वह फ़ंक्शन है size
.
इसके अलावा, c
तथा d
भी प्रकार है कि में हैं की जरूरत है Size
कक्षा, या size
उन पर नहीं बुलाया जा सकता
instance (Size c, Size d) => Size (c,d) where
इसलिए इसे पूरा करना होगा:
instance (Size c, Size d) => Size (c,d) where
size (c,d) = 1 + size c + size d