如何避免使用snapframework在haskell中的不同"字符串"类型之间进行转换?

wen*_*ong 7 haskell type-conversion haskell-snap-framework

我想为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
Run Code Online (Sandbox Code Playgroud)

你的代码为此目的是什么?

mig*_*yte 9

Snap会自动解码请求,并通过请求数据类型使其可用.它提供了用于检索请求的函数getRequestwithRequest以及用于获取各种部分的许多其他访问器函数.

常用操作还有便利功能.要获取POST或GET参数,请参阅getParam.

Snap将它作为ByteString提供给你,因为这个API处于相当低的抽象级别,让用户可以处理文本编码之类的事情.我建议您使用效率更高的Text类型而不是String.的可读型类还提供用于消除一些这些转化的样板的一个机制.数字和文本的默认实例采用UTF8编码.