के साथ एक विषम डेटा संरचना पर मैपिंग मैं एक एचएलआईटी कार्यान्वयन पर काम कर रहा हूं और मैं इसके लिए map
फ़ंक्शन को लागू करने की कोशिश कर रहा हूं। मैंने कई अलग-अलग दृष्टिकोणों की कोशिश की है, लेकिन प्रत्येक के साथ मैं उस फ़ंक्शन से संबंधित कंपाइलर त्रुटियों तक पहुंचता हूं।एक जेनेरिक फ़ंक्शन
इनपुट डेटा संरचना के सभी तत्वों पर लागू करने के लिए मैं एक सामान्य फ़ंक्शन Just
का उपयोग कैसे करना चाहता हूं इसका एक उदाहरण निम्नलिखित है।
No instance for (Apply (a0 -> Maybe a0) Int (Maybe Int))
arising from a use of `hMap'
The type variable `a0' is ambiguous
इस हल करने के लिए सभी के लिए एक रास्ता में वहाँ है और नहीं तो क्यों:
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
-- | An input heterogenous data structure
recursivePairs :: (Int, (Char, (Bool,())))
recursivePairs = (1, ('a', (True,())))
-- | This is how I want to use it
recursivePairs' :: (Maybe Int, (Maybe Char, (Maybe Bool,())))
recursivePairs' = hMap Just recursivePairs
class HMap f input output where
hMap :: f -> input -> output
-- | A counterpart of a Nil pattern match for a list
instance HMap f()() where
hMap _ _ =()
-- | A counterpart of a Cons pattern match for a list
instance
(HMap f iTail oTail,
Apply f iHead oHead) =>
HMap f (iHead, iTail) (oHead, oTail)
where
hMap f (head, tail) = (apply f head, hMap f tail)
class Apply f input output where
apply :: f -> input -> output
instance Apply (input -> output) input output where
apply = id
इस के साथ
मैं निम्नलिखित संकलक त्रुटि मिल रही है?
मुझे लगता है कि समस्या यह है कि प्रकार प्रणाली एहसास नहीं है कि आप 'बाद एक आवेदन पर अलग ठोस प्रकार के साथ Just' instantiating रहे हैं, क्योंकि' hMap' की अपनी परिभाषा ही 'f' पुन: उपयोग रहता है। पहली बार जब आप इसे लागू करते हैं तो 'Int -> शायद Int' है, दूसरी बार जब आप इसे लागू करते हैं तो यह प्रकार' Char -> शायद Char' है। हालांकि, मुझे अभी भी यह सुनिश्चित नहीं है कि इसे कैसे ठीक किया जाए। –
@ गैब्रियल गोंज़ालेज़ हां, यह बिल्कुल समस्या है। और यदि आप एक फंड जोड़ें '| इनपुट आउटपुट -> 'लागू' वर्ग में f', त्रुटि संदेश कहेंगे कि यह उदाहरणों की तलाश में है, जैसे '(बूल -> शायद बूल) चार (शायद चार)'। मैं ['cast'] (http: //hackage.haskell का उपयोग करने के बारे में सोच रहा था।संगठन/पैकेज/संग्रह/आधार/नवीनतम/डॉक्टर/एचटीएमएल/डेटा-टाइप करने योग्य.html # वी: कास्ट) एक प्रकार के स्तर पर 'एफ' के दो उपयोगों को डिस्कनेक्ट करने के लिए, लेकिन यह बहुत स्वाभाविक नहीं लग रहा था, और 'टाइप करने योग्य' के आधार पर या तो बहुत आकर्षक नहीं था। –