इस बात पर विचार करते हुए कि सर्वोत्तम मानचित्र कैसे करें, यानी traverse
, a -> Maybe a
- unboxed vector पर क्लेस्ली, मैंने एक मौजूदा कार्यान्वयन की तलाश की। जाहिर है U.Vector
Traversable
नहीं है, लेकिन it does supply a mapM
, जो कि Maybe
के लिए बिल्कुल ठीक काम करता है।आवेदक-ट्रैवर्स सरणी क्यों असंभव है? (या यह है?)
लेकिन सवाल यह है: Monad
बाधा वास्तव में जरूरी है? खैर, यह पता चला है कि यहां तक कि boxed vectors cheat for the Traversable
instance: वे वास्तव में सिर्फ एक सूची, जो वे परिवर्तित से/को पार:
instance Traversable.Traversable Vector where
{-# INLINE traverse #-}
traverse f xs = Data.Vector.fromList Applicative.<$> Traversable.traverse f (toList xs)
mono-traversable
does the same thing also for unboxed vectors; यहां यह और भी भयानक प्रदर्शन-वार लगता है।
अब, मुझे आश्चर्य नहीं होगा अगर vector
वास्तव में इन हैक किए गए ट्रैवर्सल को कई अधिक कुशल रूप में फ्यूज करने में सक्षम था, लेकिन फिर भी - एक मौलिक समस्या प्रतीत होती है, जो हमें एक ट्रैवर्सल को लागू करने से रोकती है सरणी तुरंत क्या इस अक्षमता के लिए कोई "गहरा कारण" है?
'यू.वेक्टर' के उदाहरण की कमी तत्वों पर 'अनबॉक्स' बाधा के साथ है। देखें [* अनबॉक्स किए गए सरणी क्यों फोल्ड करने योग्य नहीं हैं? *] (Http://stackoverflow.com/q/36322904/2751851) (उत्तर, स्नोयमैन द्वारा उत्तर में, * मोनो-ट्रैवर्सबल * के बारे में कुछ प्रासंगिक टिप्पणियां भी शामिल हैं)। – duplode
निश्चित रूप से, लेकिन यह वह नहीं है जो मैं पूछ रहा हूं। मुझे वास्तविक 'ट्रैवर्सबल' उदाहरण की आवश्यकता नहीं है, मुझे बस एक कुशल ट्रैवर्सल की आवश्यकता है! और 'मोनो-ट्रैवर्सबल' यह पेशकश नहीं करता है। – leftaroundabout
ओह - मैंने आपके पहले पैराग्राफ में "स्पष्ट रूप से" नोटिस नहीं किया :) – duplode