2012-12-24 43 views
21

मैंने हाल ही में ब्लॉग पोस्ट में transformers लिखा था, और किसी ने पूछा "लोग Control.Applicative.Lift का उपयोग किसके लिए करते हैं?" मैं इसका उत्तर देने में सक्षम नहीं था, इसलिए मैं स्टैक ओवरफ्लो को प्रश्न गूंजता हूं - Control.Applicative.Lift के लिए उपयोग किया जाता है?नियंत्रण क्या है। आवेदन। लिफ्ट के लिए उपयोगी है?

मुझे पैकेज में इसका एक उदाहरण उपयोग दिखाई देता है, लेकिन ऐसा लगता है कि यह पूरी तरह से पार्स करने में सक्षम नहीं है। क्या किसी को जंगली में किसी अन्य उदाहरण को पता है?

data Lift f a = Pure a | Other (f a) 

है यही कारण है, एक functor f दिया, आप एक शुद्ध मूल्य के साथ f रचना करके एक नया functor प्राप्त कर सकते हैं:

उत्तर

19

Lift एक अपेक्षाकृत नया योगदान है।

पैकेज खुद ही एक उदाहरण देता है:

-- | An applicative functor that collects a monoid (e.g. lists) of errors. 
-- A sequence of computations fails if any of its components do, but 
-- unlike monads made with 'ErrorT' from "Control.Monad.Trans.Error", 
-- these computations continue after an error, collecting all the errors. 
type Errors e = Lift (Constant e) 

-- | Report an error. 
failure :: Monoid e => e -> Errors e a 
failure e = Other (Constant e) 

मैं इस के किसी भी इन-द-जंगली का उपयोग करता है के बारे में पता नहीं है, लेकिन।

+2

यह मुझे एक अर्धचुंबक को एक मोनोइड में विस्तारित करने की याद दिलाता है: यह एक आवेदक-मज़ेदार-लेकिन-बिना शुद्ध आवेदक फिक्सर में फैलाता है। और यह दोनों मामलों में obfuscated है क्योंकि semigroups/आवेदक-functors- लेकिन बिना शुद्ध शुद्ध मानक पुस्तकालय में मौजूद नहीं हैं। – dave4420

+14

यदि आपके पास कोई आवेदक होमोमोर्फिज्म 'fug :: fu -> gu' है, तो '(f: +: g)' (जहां ': +:' pointwise sum है) आवेदक बनाया जा सकता है "जब तक आप फगिंग नहीं करते हैं तब तक बाएं रखना सही जाने के लिए "। लिफ्ट एक विशेष मामला है जहां 'एफ' प्रारंभिक आवेदक है, यानी पहचान, जिसमें से किसी अन्य के लिए एक अद्वितीय होमोमोर्फिज्म है। – pigworker

+1

इसे @ पिगवर्कर की टिप्पणी के विश्लेषण का एक उचित हिस्सा लिया गया है - लेकिन http://comonad.com/reader/2012/abstracting-with-applicatives/comment-page-1/#comment-107128 पढ़ने के बाद मैं अंततः इसे (और इसके लिए तत्काल उपयोग करें!)। धन्यवाद! – ocharles