2011-10-14 14 views
8

Tengo una aplicación WAI simple (Warp en este caso) que responde a todas las solicitudes web con "Hola". También quiero que muestre "Dijo Hola" en el servidor cada vez que se procesa una solicitud. ¿Cómo realizo IO dentro de mi controlador de respuesta WAI? Aquí está mi solicitud:Cómo realizo IO dentro de una aplicación WAI (Warp)

{-# 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" 

Respuesta

13

El tipo de una aplicación WAI es:

type Application = Request -> Iteratee ByteString IO Response 

Esto significa que una aplicación WAI se ejecuta en un transformador de Iteratee mónada sobre IO, por lo que tendrá que utilizar liftIO a realizar acciones regulares IO.

import Control.Monad.Trans 

app _ = do 
    liftIO $ putStrLn "Said hi" 
    return hello 
+1

Acabo de perder unas cuantas horas en Google y esta fue la respuesta. ¿Dónde se supone que uno debe aprender sobre temas como este al ingresar a Haskell? – Victor

Cuestiones relacionadas