उदाहरण निम्नलिखित पर विचार करें: जबकि safeMapM
(GHC 7.6.1 का उपयोग कर -O2
के साथ) ठीक से काम करने लगता हैमानचित्र का उपयोग कर रहा है/अनुक्रम अच्छा अभ्यास माना जाता है?
safeMapM f xs = safeMapM' xs []
where safeMapM' [] acc = return $ reverse acc
safeMapM' (x:xs) acc = do y <- f x
safeMapM' xs (y:acc)
mapM return largelist -- Causes stack space overflow on large lists
safeMapM return largelist -- Seems to work fine
mapM
का उपयोग करते हुए बड़ी सूची पर एक ढेर अंतरिक्ष अतिप्रवाह कारण बनता है। हालांकि मैं हास्केल मानक पुस्तकालयों में safeMapM
के समान फ़ंक्शन नहीं ढूंढ पाया।
क्या यह अभी भी mapM
(या उस मामले के लिए sequence
) का उपयोग करने के लिए अच्छा अभ्यास माना जाता है?
यदि हां, तो क्यों यह ढेर अंतरिक्ष अतिप्रवाह के खतरे के बावजूद अच्छा अभ्यास माना जाता है?
जो विकल्प नहीं यदि आप उपयोग करने के लिए सुझाव है कि करते हैं?
शायद 'मैपएम' तेज है अगर यह अधिक नहीं होता है क्योंकि आपको' रिवर्स 'नहीं करना पड़ता है? क्या आपने इसे माप लिया? –
क्या आप 'मेन' मॉड्यूल पोस्ट कर सकते हैं जिसका उपयोग आपने परीक्षण किया था? – jberryman
इसके अलावा, मोनैड हैं (जैसे 'Control.Monad.State.Lazy') जहां कुछ' 100 <$> मैपएम आईडी [1 ..] 'समाप्त होता है। '100 <$> सुरक्षित मैपएम आईडी [1 ..]' मोनाड –