{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeOperators #-} import GHC.Generics import Data.Aeson import Network.HTTP.Media ((//)) import qualified Network.Wai.Handler.Warp as Warp import Servant import Servant.Mustache -- * For HTML Examle data User = User { name :: String , age :: Int } deriving (Generic, ToJSON) -- * For Template Example data CSS instance Accept CSS where contentType _ = "text" // "css" data CSSData = CSSData { darken :: Bool , pageWidth :: Int } deriving (Generic, ToJSON) -- * Server implementation type API = Get '[HTML "user"] User :<|> "style.css" :> Get '[Template CSS "style"] CSSData api :: Proxy API api = Proxy server :: Server API server = pure (User "lambdabot" 35) :<|> pure (CSSData True 400) main :: IO () main = do loadTemplates "example/templates" putStrLn "Listening on port 8080" Warp.run 8080 $ serve api server