4

Happstack を使用して単純なリクエスト ハンドラーを実装しようとしています。

main :: IO ()
main = simpleHTTP nullConf app

app :: ServerPart Response
app = msum [
             dir "hello" $ method GET  >> helloGet
           , dir "hello" $ method POST >> helloPost
           ]

を繰り返さずに同様のことを達成するにはどうすればよいdir "hello"ですか?

これ、

app :: ServerPart Response
app = msum [
             dir "hello" $ do
                method GET  >> helloGet
                method POST >> helloPost
           , okResponse home
           ]

デフォルトの部分にのみ「フォールスルー」します。

4

2 に答える 2

2
app :: ServerPart Response
app = msum [
             dir "hello" $ (method GET >> helloGet) <|> (method POST >> helloPost)
           , okResponse home
           ]

ServerPart..適切なAlternativeインスタンスがあると仮定します。何らかの理由で欠落している場合は、 に置き換えることができ(<|>)ますmplus。ここでの主なアイデアは、1 つのルーティング コンビネータを別のルーティング コンビネータ内にネストするということです。

于 2013-06-27T21:15:25.743 に答える
1

これはすでにかなり近いです:

app :: ServerPart Response
app = msum [
             dir "hello" $ do
                method GET  >> helloGet
                method POST >> helloPost
           , okResponse home
           ]

追加のネストされた が必要なだけですmsum

app :: ServerPart Response
app = msum [
             dir "hello" $
                msum [ method GET  >> helloGet
                     , method POST >> helloPost
                     ]
           , okResponse home
           ]

他の誰かが示唆したように<|>、 orまたはにmplus関連する他の機能も使用できます。AlternativeMonadPlus

  • ジェレミー
于 2013-06-28T02:06:56.227 に答える