Как выполнить IO внутри приложения WAI (деформация) - PullRequest
8 голосов
/ 14 октября 2011

У меня есть простое приложение WAI (в данном случае Warp), которое отвечает на все веб-запросы «Hi».Я также хочу, чтобы он отображал «Said hi» на сервере каждый раз, когда обрабатывается запрос.Как мне выполнить IO внутри моего обработчика ответа WAI?Вот мое заявление:

{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.HTTP.Types (status200)
import Network.Wai.Handler.Warp (run)

main :: IO ()
main = do
    putStrLn "http://localhost:3000/"
    run 3000 app

app :: Application
app _ = return hello

hello = responseLBS status200 [("Content-Type", "text/plain")] "Hi"

1 Ответ

13 голосов
/ 14 октября 2011

Тип приложения WAI:

type Application = Request -> Iteratee ByteString IO Response

Это означает, что приложение WAI работает в Iteratee монадном преобразователе над IO, поэтому вам придется использовать liftIO длявыполнять обычные IO действия.

import Control.Monad.Trans

app _ = do
    liftIO $ putStrLn "Said hi"
    return hello
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...