/ / हास्केल: टाइपकास्ट और उदाहरण (स्कोप में नहीं: डेटा कंस्ट्रक्टर ..) - हैस्केल, उदाहरण, टाइपसेकल्स

हास्केल: टाइपक्लास और उदाहरण (दायरे में नहीं: डेटा कन्स्ट्रक्टर ..) - हैकेल, उदाहरण, टाइपक्लास

मैं एक विधि के साथ एक टाइपकास्ट आकार बनाना चाहता हूं, जो एक मान देता है की संख्या इस मान में निर्माता।

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