2012-01-27 15 views
13

मैं एक वेब ऐप लिखने के साथ खेल रहा हूं। इस मामले में, मैं scotty और redis का उपयोग कर रहा हूं, लेकिन यह समस्या किसी भी वेब/डीबी कॉम्बो में आती है। मैंने इससे पहले खुशहाली का इस्तेमाल किया, इसलिए मुझे वहां एक उदाहरण भी पसंद आएगा।दो मोनादों को मिलाएं जब न तो ट्रांसफार्मर हो?

आप एक नेस्टेड इकाई है, जो यह आसान एक मार्ग के भीतर डेटाबेस कनेक्शन का उपयोग करने के लिए बनाता है में मार्गों को परिभाषित स्कॉटी है:

main = do 
    db <- connect defaultConnectInfo 
    scotty 3000 $ do 

    get "/keys" $ do 
     keys <- liftIO $ runRedis db $ keys "*" 
     html $ T.pack $ show keys 

The Block करते get में टाइप किया है: Web.Scotty.ActionM()। सभी रेडिस कमांडों में Database.Redis.Redis a टाइप किया गया है। न तो रेडिस या स्कॉटी में एक मोनड ट्रांसफॉर्मर होता है।

इन्हें गठबंधन करने का सबसे अच्छा तरीका क्या है? मैं हैकेल के लिए नया हूं, लेकिन मैंने रीडर्ट को वेबस्टेड के साथ काम करने में कामयाब रहा।

आदर्श रूप से, मैं किसी भी तरह से एक नया मोनैड स्टैक बना सकता हूं जो एक ही ब्लॉक में keys और html दोनों का समर्थन करता है।

+1

क्या लोग आम तौर पर हैकेल वेब ढांचे में लिफ्टियो के लिए बस जाते हैं? –

+1

मुझे यहां कोई जवाब नहीं पता, लेकिन मुझे लगता है कि आपकी समस्या मोनाड ट्रांसफार्मर के समान है। असल में, आप एक प्रकार को कार्यान्वित करना चाहते हैं, आइए इसे 'पहचान टीटी एम' 'कहें, जैसे कि' पहचान टीटी '' बिल्कुल '[पहचान पत्र'] (http://hackage.haskell.org/packages/archive/transformers /0.2.1.0/doc/html/Control-Monad-Trans-Identity.html)। उत्तर देने वाला पहला सवाल, ज़ाहिर है, अगर यह भी संभव है। –

+0

सवाल वाक्यांश का एक और तरीका यह है: क्या आप सभी हैकेल ढांचे में डेटाबेस से पूछने के लिए लिफ्टियो का उपयोग करते हैं? जब डेटाबेस ढांचे में बेक्ड नहीं होता है तो सबसे आम पैटर्न क्या होता है? –

उत्तर

4

किसी कारण से मुझे लगा कि लिफ्टियो बदसूरत था, लेकिन यह वास्तव में बुरा नहीं है। आप ऐसा करते हैं, खासकर यदि:

queryRedis :: Connection -> Redis a -> ActionM a 
queryRedis db r = liftIO $ runRedis db r 

और एक आंशिक रूप से लागू किया समारोह redis = queryRedis db परिभाषित करते हैं। धन्यवाद सभी

संबंधित मुद्दे