@@ -1,5 +1,6 @@
11module Hack.Frontend.MonadCGI
22 ( cgiToApp
3+ , cgiToAppGeneric
34 ) where
45
56import Hack
@@ -18,16 +19,22 @@ safeRead d s = case reads s of
1819 _ -> d
1920
2021cgiToApp :: CGI CGIResult -> Application
21−cgiToApp cgi env = do
22+cgiToApp = cgiToAppGeneric id
23+
24+cgiToAppGeneric :: Monad m
25+ => (m (Headers, CGIResult) -> IO (Headers, CGIResult))
26+ -> CGIT m CGIResult
27+ -> Application
28+cgiToAppGeneric toIO cgi env = do
2229 let vars = map (first fixVarName) (http env)++ getCgiVars env
2330 input = hackInput env
2431 (inputs, body') = decodeInput vars input
2532 req = CGIRequest
2633 { cgiVars = Map.fromList $ vars
27− , cgiInputs = inputs
34+ , cgiInputs = inputs
2835 , cgiRequestBody = body'
2936 }
30− (headers'', output') <- runCGIT cgi req
37+ (headers'', output') <- toIO $ runCGIT cgi req
3138 let output = case output' of
3239 CGIOutput bs -> bs
3340 CGINothing -> BS.empty