

Haskellでwai,warpを使ってapiサーバーを作りたいと考えたのですが  
requestをByteStringに直して関数に渡したいのですがうまくいきません  
よろしくお願いします

[code]

    app :: Application
    app request respond = respond $ case rawPathInfo request of
        "/"     -> htmlIndex
        "/raw"  -> plainIndex
        _       -> function $ rawPathInfo request
    
    function :: ByteString -> Response
    function req = responseLBS
        status200
        [("Content-Type", "text/plain")]
        req
    
[/code]


CC BY-SA 3.0
2017-07-12T06:53:49.127
36293
2017-07-12T08:22:59.713
24357
question
api http haskell
Haskellのwaiについて


これは、おそらく、正格ByteStringと遅延ByteStringとの、型の不一致ですね。  
それぞれ、モジュール名も含めて書くと、つぎのようになります。

  * Data.ByteString.ByteString
  * Data.ByteString.Lazy.ByteString

これらは別の型です。対応としては、関数Data.ByteString.Lazy.fromStrictで、関数rawPathInfoの返り値を変換してやればいいでしょう。

対話環境に読み込める定義ファイルで例を示します。

[code]

    {-# LANGUAGE OverloadedStrings #-}
    
    import Network.Wai
    import Network.Wai.Handler.Warp
    
    import qualified Data.ByteString as BS
    import qualified Data.ByteString.Lazy as LBS
    
    app :: Application
    app request respond = respond $ case rawPathInfo request of
            rp -> function rp
    
    function :: BS.ByteString -> Response
    function req = responseLBS
            undefined
            [("Content-Type", "text/plain")]
            (LBS.fromStrict req)
    
[/code]


CC BY-SA 3.0
2017-07-12T08:14:54.950
36296
2017-07-12T08:22:59.713
2017-07-12T08:22:59.713
269
269
36293
answer