hack-2009.4.29: src/Hack/Contrib/ShowExceptions.hs
module Hack.Contrib.ShowExceptions (show_exceptions) where
import Hack
import Hack.Contrib.Hub
import MPSUTF8
import Prelude hiding ((.), (^), (>), log)
import Data.Maybe
import Data.Default
import System.IO
import System.IO.Error
program :: String
program = "ShowExceptions"
show_exceptions :: Maybe Stream -> MiddleWare
show_exceptions stream app = \env -> do
let my_stream = stream.fromMaybe (env.hack_errors)
let log = simple_logger my_stream program
app env `catch` (handler log)
where
handler :: Logger -> IOError -> IO Response
handler log e = do
let message = e.show
Error. log message
return $ def { status = 500, body = message }