Consider this simple handler:
fooHandler :: Snap ()
fooHandler = do
setTimeout 1
liftIO $ threadDelay $ 3*1000*1000
writeBS "Foo called"
We expect this handler throws an exception since we set 1 second timeout, our computation takes at least 3 seconds.
But it doesn't. It often throws exception, most of the time writes "Foo called" message.