これは、おそらくIO()
モナドと関係するハスケルの新しい質問です。Happstackに読み取りファイルを表示
私はファイルアップロードの応答を生成するHappstack.Server
プログラムの機能を持っています。
postFile = do methodM POST
decodeBody filePolicy
(tmp, name, meta) <- lookFile "upload"
ok $ concat ["A file! ", tmp, " || ", name, " || ", show meta]
これは問題なく動作します。ここでは、アップロードされたファイルの内容、ローカルの一時的な名前、元の名前、およびコンテンツタイプのメタデータを表示したいと思います。私は、これはすべてのdo
ブロックで開催されているためと仮定した私は可能性だけ
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
呼び出しでアップしている私に教えているようだエラーの文字列を渡します。
...
/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
をインストールし直してください。
ハッシュスタックは分かりませんが、おそらく 'liftIO $ readFile tmp'を使う必要があります。 – hammar
他の人は言っていますが、あなたは「liftIO」が必要です。私はクラッシュコースにこのセクションを追加します。 – stepcut