diff --git a/Hack/Frontend/MonadCGI.hs b/Hack/Frontend/MonadCGI.hs
--- a/Hack/Frontend/MonadCGI.hs
+++ b/Hack/Frontend/MonadCGI.hs
@@ -1,5 +1,6 @@
 module Hack.Frontend.MonadCGI
     ( cgiToApp
+    , cgiToAppGeneric
     ) where
 
 import Hack
@@ -18,16 +19,22 @@
                 _ -> d
 
 cgiToApp :: CGI CGIResult -> Application
-cgiToApp cgi env = do
+cgiToApp = cgiToAppGeneric id
+
+cgiToAppGeneric :: Monad m
+                => (m (Headers, CGIResult) -> IO (Headers, CGIResult))
+                -> CGIT m CGIResult
+                -> Application
+cgiToAppGeneric toIO cgi env = do
     let vars = map (first fixVarName) (http env)++ getCgiVars env
         input = hackInput env
         (inputs, body') = decodeInput vars input
         req = CGIRequest
                 { cgiVars = Map.fromList $ vars
-               	, cgiInputs = inputs
+                , cgiInputs = inputs
                 , cgiRequestBody = body'
                 }
-    (headers'', output') <- runCGIT cgi req
+    (headers'', output') <- toIO $ runCGIT cgi req
     let output = case output' of
                     CGIOutput bs -> bs
                     CGINothing -> BS.empty
diff --git a/hack-frontend-monadcgi.cabal b/hack-frontend-monadcgi.cabal
--- a/hack-frontend-monadcgi.cabal
+++ b/hack-frontend-monadcgi.cabal
@@ -1,5 +1,5 @@
 name:            hack-frontend-monadcgi
-version:         0.0.2
+version:         0.0.3
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
