में एमवीसी ढांचे के लिए लेंस मैं डब्ल्यूपीएफ या एंगुलरजेएस के मोल्ड में हास्केल में एमवीसी फ्रेमवर्क कैसे बनाएगा, इस विचार के आसपास उलझ रहा हूं, लेकिन ऐसा लगता है कि मुख्य प्रकार या विचार नहीं मिल रहा है शुरू कर दिया है। तो दुर्भाग्य से अस्पष्ट सवाल - क्या इस समस्या के बारे में सोचने से कोई और है?हास्केल
मुझे संपादन-लेंस, बहु-प्लेट और कंपोज़ दिखाई देता है, लेकिन मुझे लगता है कि वे सभी थोड़ा अलग समस्याएं हल करते हैं।
कि कैसे होगा काम करेगा का मेरा स्केच:
- एक सादे Haskell डेटा संरचना
- के रूप में एक मॉडल बनाएँ 'लेंस' का एक सेट या अपने मॉडल को संशोधित करने के आदेश देता है।
- एक HTML (या जो भी) टेम्पलेट लिखें जो मॉडल के प्रकारों द्वारा पैरामीट किया गया है।
। मेरे विचार के कुछ हिस्सों को अद्यतन करने के जब मैं एक लेंस लागू
Model -> Template Model -> Html
और एक समारोह:
data Model = Page { _title :: String, _content :: [(Int, String)] }
title :: Lens Model String
content :: Int -> Lens Model (Maybe String)
तो मैं एक समारोह में लिखने के लिए सक्षम होने के लिए चाहते हैं।
Lens Model a -> a -> HtmlTemplate Model -> [(Path, Html)]
तो मुझे लगता है कि सवाल यह है कि - किस प्रकार एक लेंस ले जाएगा जो एक डेटा संरचना पर काम कर सकते हैं, तो दूसरी में परिवर्तन का वर्णन करने के लिए इस्तेमाल किया जा।
एक संभावना एक जीएडीटी बनाने के लिए प्रतीत होता है जो सभी लेंस लपेटता है और फिर HTML को GADT प्रकार पर टेम्पलेट करता है जिसका उपयोग प्रत्येक चरण में टेम्पलेट के खिलाफ मिलान करने के लिए किया जा सकता है। जैसे
data Lenses a b where
Title :: Lens Model String -> Lenses Model String
Item :: Lens Model String -> Lenses Model (Maybe String)
फिर एक HTML टेम्पलेट डेटा प्रकार उदा।
data HtmlTemplate a = Text String
| Element String [Attrib a]
| forall b. Binding (Lenses a b) (Html b)
जिस पर बाध्यकारी तत्व सीधे पैटर्न के साथ मिलान किया जा सकता है।
लेकिन यह लगभग बिंदु को हराने लगता है, क्योंकि मॉडल तब दृश्य में हिप में शामिल हो गया है।
मुझे आश्चर्य है कि कोई भी (मुझे चालाक) बाहर रखता है कि यह कैसे काम कर सकता है? या यहां तक कि अगर यह एक अच्छा विचार है?
मैंने मनमाने ढंग से प्रभावशाली संचालन का समर्थन करने के लिए एक प्रयोगात्मक लेंस लाइब्रेरी शुरू की है, जिसे आप देखना चाहते हैं (इस समय आप इसका उपयोग करने की अनुशंसा नहीं कर सकते क्योंकि एपीआई बदल जाएगा, यह प्रयोगात्मक है, और गोल था जब reddit पर चर्चा की गई थी उस पर बकवास)। आपके मामले के सबसे नज़दीकी [इस पोस्ट] में अंतिम उदाहरण होगा (http://brandon.si/code/yall/); जब आप मॉडल पर लेंस ऑप्स करते हैं तो संभवतः आप 'दृश्य' में अपना दृश्य संशोधित करना चाहते हैं: 'लेंसएम (स्टेट व्यू) मॉडल ए' या ऐसा कुछ। लेकिन मैंने एमवीसी पैटर्न का अधिक उपयोग नहीं किया है, इसलिए मुझे माफ़ कर दो अगर मैं – jberryman
बंद कर रहा हूं तो मुझे लगता है कि कम से कम समाधान का आधा हिस्सा है, ताकि आप या तो दृश्य में अपने परिवर्तनों को बढ़ा सकें (या सीधे दृश्य को संशोधित कर सकें) । हालांकि मुझे लगता है कि मैं जो खो रहा हूं वह मॉडल और दृश्य (टेम्पलेट मॉडल) को एक साथ करने के लिए एक तंत्र है - एक ही समय में दो संबंधित संरचनाओं को पार करने के लिए किसी प्रकार का ज़िप। – Oliver
आपको रुचि हो सकती है http://www.haskellforall.com/2014/04/model-view-controller-haskell-style.html – hdgarrood