मैं एक डेटाबेस में बहुत सी पहुंच के साथ एक हैप्स्टैक एप्लिकेशन बनाना चाहता हूं। मुझे लगता है कि नीचे और शीर्ष पर एक डाटाबेस लिखें की तरह इकाई (बीच में लॉग लेखक के साथ) पर आईओ के साथ एक इकाई ढेर प्रत्येक एक्सेस, उदाहरण में एक स्पष्ट कार्यों के लिए काम करेंगे:हैप्स्टैक में डेटाबेस मोनाड स्टैक कैसे बनाएं?
itemsRequest :: ServerConfig -> ServerPart Response
itemsRequest cf = dir "items" $ do
methodM [GET,HEAD]
liftIO $ noticeM (scLogger cf) "sended job list"
items <- runDBMonad (scDBConnString cf) $ getItemLists
case items of
(Right xs) -> ok $ toResponse $ show xs
(Left err) -> internalServerError $ toResponse $ show err
के साथ:
getItemList :: MyDBMonad (Error [Item])
getItemList = do
-- etc...
लेकिन मैं इकाई और इकाई ट्रांसफॉर्मर (मैं एक व्यायाम इसके बारे में जानने के लिए के रूप में इस सवाल देखें) का कम ज्ञान है, और मुझे कैसे डाटाबेस इकाई के निर्माण शुरू करने के लिए, कैसे लिफ्ट करने के लिए आईओ पता नहीं है खुशहाल से डाटाबेस स्टैक तक ... आदि। इस मामले में, मूल्य हम चाहते हैं कि हर कोई कम से प्राप्त करने के लिए डेटाबेस कनेक्शन है -
type MyMonad a = ReaderT DbHandle ServerPart a
Reader
इकाई ट्रांसफार्मर एकल मान ask
समारोह का उपयोग कर सुलभ बना देता है:
मैंने आईओओ करने के लिए 'unsafePerformIO' का उपयोग करने की कोशिश की। चूंकि हैप्स्टैक पूरी तरह से संयोजन का उपयोग करता है, शायद यह आईओ करने का आपका एकमात्र तरीका है। – Nybble
@Wu Xingbo, लिफ्टियो के साथ खुशहाल पर आईओ करना संभव है, लेकिन मुझे नहीं पता कि कौन सा मोनैड स्टैक पास करना है। – Zhen