7

POST データのデコード結果を生成したい。「文字列」の変換で多くのコードが「無駄」になります。それはコードを醜くします。より良い解決策はありますか?

import           Codec.Binary.Url (decode')
import qualified Data.ByteString.Lazy.Char8 as L (unpack)
import qualified Data.ByteString.Char8 as S (unpack, pack)
import qualified Data.ByteString.Lazy as LBS (pack)

decodeUrlHandler :: Snap()
decodeUrlHandler = do
    body <- readRequestBody (maxBound :: Int64)
    writeLBS $ LBS.pack $ map (fromMaybe 0) $ decode' $ L.unpack body

この目的のためのコードは何でしょうか?

4

1 に答える 1

9

Snap はリクエストを自動的にデコードし、 Requestデータ型で利用できるようにします。リクエストを取得するための関数getRequestおよびwithRequestと、さまざまな部分を取得するための他の多くのアクセサ関数を提供します。

よく使う操作に便利な機能もあります。POST または GET パラメーターを取得するには、getParamを参照してください。

Snap はこれを ByteString として提供します。これは、この API の抽象化レベルがかなり低く、テキスト エンコーディングなどを処理する方法がユーザーに任されているためです。String ではなく、はるかに効率的な Text 型を使用することをお勧めします。Readable型クラスは、これらの変換のボイラープレートの一部を排除するメカニズムも提供します。数値とテキストのデフォルトのインスタンスは、UTF8 エンコーディングを前提としています。

于 2011-11-18T17:05:33.557 に答える