यह IO()
मोनैड के साथ संभवतः एक हास्केल नया प्रश्न है।हैप्स्टैक एक पठन फ़ाइल प्रदर्शित करता है
मुझे Happstack.Server
प्रोग्राम में एक फ़ंक्शन मिला है जो फ़ाइल अपलोड के लिए प्रतिक्रिया उत्पन्न करता है।
postFile = do methodM POST
decodeBody filePolicy
(tmp, name, meta) <- lookFile "upload"
ok $ concat ["A file! ", tmp, " || ", name, " || ", show meta]
यह ठीक काम करता है। अब, मैं इसे अपलोड की गई फाइल की सामग्री के साथ-साथ इसके स्थानीय tempname, मूल नाम और सामग्री-प्रकार मेटाडेटा को प्रदर्शित करना चाहता हूं। मैं यह सोचते गया था कि सिर्फ
postFile = do methodM POST
decodeBody filePolicy
(tmp, name, meta) <- lookFile "upload"
contents <- readFile tmp
ok $ concat ["A file! ", tmp, " || ", name, " || ", show meta, "\n\n", contents]
लेकिन है कि मुझे त्रुटियों की एक स्ट्रिंग मुझे बताने के लिए कुछ decodeBody
कॉल के साथ है लगता है कि हाथ के बाद से यह एक do
ब्लॉक में सभी जगह ले जा रहा है, मैं कर सकता।
...
/home/inaimathi/projects/happstack-tutorial/parameters.hs:23:15:
No instance for (Happstack.Server.Internal.Monads.WebMonad
Response IO)
arising from a use of `decodeBody'
Possible fix:
add an instance declaration for
(Happstack.Server.Internal.Monads.WebMonad Response IO)
In a stmt of a 'do' block: decodeBody filePolicy
In the expression:
do { methodM POST;
decodeBody filePolicy;
(tmp, name, meta) <- lookFile "upload";
contents <- readFile tmp;
.... }
In an equation for `postFile':
postFile
= do { methodM POST;
decodeBody filePolicy;
(tmp, name, meta) <- lookFile "upload";
.... }
...
मुझे यकीन नहीं है कि यहां क्या गलत हो रहा है। क्या कोई मुझे शिक्षित कर सकता है?
EDIT3:
यही निष्कर्ष पर जाने के लिए मुझे जानेंगे।
अतिरिक्त त्रुटियों को मैं अनुचित रूप से स्थापित पुस्तकालयों के कारण था। मेरे ~/.ghc
को साफ़ करना, फिर happstack
इंस्टॉल करना फिर से तय किया गया।
हैप्स्टैक को नहीं पता, लेकिन आपको शायद 'लिफ्टियो $ readFile tmp'' का उपयोग करने की आवश्यकता है। – hammar
जैसा कि अन्य ने कहा है, आपको बस 'लिफ्टियो' की आवश्यकता है। मैं इस पर क्रैश कोर्स में एक सेक्शन जोड़ूंगा। – stepcut