summaryrefslogtreecommitdiff
path: root/lambda-calcul/haskell/src/Minilang
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud@pankzsoft.com>2025-11-04 09:06:01 +0100
committerArnaud Bailly <arnaud@pankzsoft.com>2025-11-04 09:06:01 +0100
commitdf879037d135c0b300735185d5fdc0857ed797d6 (patch)
tree60ea569254a110be6fc53453e99312e2f16fc384 /lambda-calcul/haskell/src/Minilang
parent1083bb7758a2dfe3f2861bf802627cec16933861 (diff)
downloadlambda-nantes-df879037d135c0b300735185d5fdc0857ed797d6.tar.gz
Serve index.html when requesting '/'
Diffstat (limited to 'lambda-calcul/haskell/src/Minilang')
-rw-r--r--lambda-calcul/haskell/src/Minilang/API.hs10
-rw-r--r--lambda-calcul/haskell/src/Minilang/App.hs14
-rw-r--r--lambda-calcul/haskell/src/Minilang/Server.hs8
3 files changed, 17 insertions, 15 deletions
diff --git a/lambda-calcul/haskell/src/Minilang/API.hs b/lambda-calcul/haskell/src/Minilang/API.hs
index 65e652a..2b8743f 100644
--- a/lambda-calcul/haskell/src/Minilang/API.hs
+++ b/lambda-calcul/haskell/src/Minilang/API.hs
@@ -1,13 +1,13 @@
{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE TypeOperators #-}
module Minilang.API where
+import Data.Aeson (FromJSON, ToJSON)
import Data.Time (UTCTime)
-import Servant (Get, JSON, (:>))
import GHC.Generics (Generic)
-import Data.Aeson (ToJSON, FromJSON)
+import Servant (Get, JSON, (:<|>), (:>), Raw)
data Score = Score
{ name :: String,
@@ -16,4 +16,6 @@ data Score = Score
}
deriving (Eq, Show, Generic, ToJSON, FromJSON)
-type LambdaAPI = "api" :> "leaderboard" :> Get '[JSON] [Score]
+type LambdaAPI =
+ "api" :> "leaderboard" :> Get '[JSON] [Score]
+ :<|> Raw
diff --git a/lambda-calcul/haskell/src/Minilang/App.hs b/lambda-calcul/haskell/src/Minilang/App.hs
index 2d21961..8c1fb2b 100644
--- a/lambda-calcul/haskell/src/Minilang/App.hs
+++ b/lambda-calcul/haskell/src/Minilang/App.hs
@@ -1,14 +1,20 @@
module Minilang.App where
-import Minilang.API (LambdaAPI, Score (..))
-import Servant.Server (Handler, Server)
-import Data.Time (getCurrentTime)
import Control.Monad.IO.Class (liftIO)
+import Data.Time (getCurrentTime)
+import Minilang.API (LambdaAPI, Score (..))
+import Network.Wai.Application.Static (defaultFileServerSettings, staticApp)
+import Servant ((:<|>) (..))
+import Servant.Server (Application, Handler, Server, Tagged (..))
lambdaApp :: Server LambdaAPI
-lambdaApp = getLeaderboard
+lambdaApp = getLeaderboard :<|> Tagged staticResources
getLeaderboard :: Handler [Score]
getLeaderboard = do
now <- liftIO getCurrentTime
pure [Score "Alice" 95 now, Score "Bob" 88 now]
+
+-- | Serve static resources under `public/` directory
+staticResources :: Application
+staticResources = staticApp (defaultFileServerSettings "public")
diff --git a/lambda-calcul/haskell/src/Minilang/Server.hs b/lambda-calcul/haskell/src/Minilang/Server.hs
index 8717081..d627271 100644
--- a/lambda-calcul/haskell/src/Minilang/Server.hs
+++ b/lambda-calcul/haskell/src/Minilang/Server.hs
@@ -45,9 +45,7 @@ startServer serverPort = do
loggerMiddleware <- runHTTPLog logger
let app =
loggerMiddleware $
- runNetREPL logger envs $
- staticResources $
- serveAPI
+ runNetREPL logger envs serveAPI
(port, action) <- startWarp serverPort app
thread <- async action
logInfo logger $ object ["action" .= ("Started" :: Text), "port" .= port]
@@ -78,7 +76,3 @@ stopServer _ = pure ()
waitServer :: Server -> IO ()
waitServer (Server (Just th) _) = wait th
waitServer _ = pure ()
-
--- | Serve static resources under `public/` directory
-staticResources :: Middleware
-staticResources = staticPolicyWithOptions defaultOptions (addBase "public")