Something went wrong. Try again.
A Haskell Webserver Template
Something went wrong. Try again.
1.9 kB · 47 lines
Haskell
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748module Main where
--------------------------------------------------------------------------------
import Control.Exception (bracket)import qualified Control.Logging as Logimport qualified Network.Wai as Waiimport qualified Network.Wai.Handler.Warp as Warpimport Webserver.Control.Nil (Nil (..))import qualified Webserver.Control.Sql as Sqlimport Webserver.Control.Telemetry (initTelemetry, shutdownTelemetry)import qualified Webserver.Data.Context as Contextimport Webserver.Data.Context (Context (..))import Webserver.Data.Mode (Mode (Development, Production))import Webserver.Data.Sql.Cache.Session (Sessions)import qualified Webserver.Middlewares as Middlewaresimport qualified Webserver.Routes as Routes
--------------------------------------------------------------------------------
main :: IO ()main = let app :: Sessions -> Context -> Wai.Request -> (Wai.Response -> IO Wai.ResponseReceived) -> IO Wai.ResponseReceived app = Middlewares.middlewares Routes.router in Log.withStdoutLogging <| do Log.setLogTimeFormat "[%FT%T]"
bracket initTelemetry shutdownTelemetry \telemetrySt -> bracket Sql.acquirePool Sql.releasePool \pool -> do ctx <- Context.loadContext pool telemetrySt Log.debug <| "Context loaded: " <> showAsText ctx
Log.setLogLevel <| case ctx.mode of Development -> Log.LevelDebug Production -> Log.LevelInfo
Log.log "Running..."
Warp.run 9090 (app nil ctx)