मैं निम्नलिखित कार्यक्रम hash_lookup.hs
में एक साधारण हैश वृक्ष संरचना लिख रहा हूँ में:हास्केल: कठिनाई संदर्भ embedding (Eq क) एक डेटा घोषणा
module Main where
data (Eq a) => HashTable a b = HashChildren (a, [HashTable a b]) | Hash (a, b) deriving (Show)
getKey :: HashTable a b -> a
getKey (HashChildren (k, hs)) = k
getKey (Hash (k, h)) = k
lookUp :: [a] -> HashTable a b -> Maybe (HashTable a b)
lookUp [] table = return table
lookUp _ (Hash _) = Nothing
lookUp (p:path) (HashChildren (_, ts)) = lookUp path (head (dropWhile (\x -> (getKey x) /= p) ts))
getKey एक दिया HashTable की जड़ कुंजी को पुनः प्राप्त करने का इरादा है , और लुकअप स्ट्रिंग्स की एक सूची लेता है और इसका मतलब यह है कि जब तक यह पूर्ण पथ तक पहुंचता है या असफल रहता है (मुझे पता है कि यह पेड़ के लिए प्राकृतिक व्यवहार नहीं है लेकिन यह मेरा ट्यूटोरियल चाहता है)।
मैं दो प्रश्न हैं: 1) क्यों मैं डेटा घोषणा में (Eq a)
के बावजूद एक त्रुटि संदेश मुझे बता a /= a
(अंतिम पंक्ति से) है के रूप में वहाँ No instance for (Eq a)
अनुमति नहीं है कि (टर्मिनल में त्रुटि संदेश), मिलता है ?
2) त्रुटि मैं हो रही है और देखने समारोह का प्रतीत होता है अजीब व्यवहार के अलावा, इस अच्छा या मुहावरेदार हास्केल है?
धन्यवाद
डेटाटाइप संदर्भ सुविधा को हास्केल के भविष्य के संस्करण में हटाया जा रहा है http://www.haskell.org/pipermail/haskell/2011-January/022497.html – sdcvvc