{-# LANGUAGE OverloadedStrings, GeneralizedNewtypeDeriving, ScopedTypeVariables #-} {-# language DeriveAnyClass #-} {-# language LambdaCase #-} module Main (main) where import Control.Exception (Exception(..)) import Control.Monad.IO.Class import Data.String (fromString) import Data.Typeable import Network.HTTP.Types import Network.Wai.Middleware.RequestLogger import Prelude () import Prelude.Compat import System.Random import Web.Scotty.Trans -- | A custom exception type. data Except = Forbidden | NotFound Int | StringEx String deriving (Show, Eq, Typeable, Exception) -- | User-defined exceptions should have an associated Handler: handleEx :: MonadIO m => ErrorHandler m handleEx = Handler $ \case Forbidden -> do status status403 html "