6
मैं डेटा.मैप.मैप पर फ़ंक्शन एफएमएपी को कार्यान्वित करने का प्रयास कर रहा हूं, लेकिन मुझे एक त्रुटि मिल रही है। मुझे यकीन है कि इस काम को प्राप्त करने के लिए मुझे मानचित्र को सूची में बदलने की आवश्यकता नहीं है, लेकिन यह अब तक का सबसे अच्छा है।"डेटा पर फ़ैक्टर को कार्यान्वित करते समय" ऑर्ड के लिए कोई उदाहरण नहीं "। मैप.मैप
class Functor' f where
fmap' :: (a -> b) -> f a -> f b
instance Functor' (Map.Map k) where
fmap' f m
| Map.null m = Map.empty
| otherwise = let x:xs = Map.toList m
mtail = Map.fromList xs
a = fst x
b = snd x
in Map.insert a (f b) (fmap f mtail)
त्रुटि:
No instance for (Ord k)
arising from a use of `Map.fromList'
In the expression: Map.fromList xs
In an equation for `mtail': mtail = Map.fromList xs
In the expression:
let
x : xs = Map.toList m
mtail = Map.fromList xs
a = fst x
....
in Map.insert a (f b) (fmap f mtail)
कोई भी विचार?
बस 'ऑर्ड' संदर्भ में रखें: 'उदाहरण Ord k => Functor' (Map.Map k) जहां '। – JJJ
अच्छा, धन्यवाद! क्या सूची में और उससे कनवर्ट करने से बेहतर तरीका है? – pyrospade
हां, सूचियों और 'ऑर्ड के' बाधा का उपयोग किए बिना 'फंक्टर (मानचित्र के)' के लिए 'fmap' लिखने का एक बेहतर तरीका है। इस प्रकार 'Data.Map.map' ('=' 'के लिए ==' fmap') काम करता है: http://www.haskell.org/ghc/docs/latest/html/libraries/containers-0.4.2.1/ src/डेटा-Map.html # नक्शा। लेकिन अगर आप 'toList' /' से list' का उपयोग करना चाहते हैं तो कुछ 'fmap' f = Map.fromList जैसे कुछ। मानचित्र (दूसरा एफ)। Map.toList' सरल होगा ('दूसरा'' Control.Arrow' से है)। – JJJ