packages feed

symantic-http-demo-0.0.0.0: server/Main.hs

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeApplications #-}
module Main where
import qualified Control.Concurrent as Concurrent
import qualified Control.Monad.Classes as MC
import qualified Network.Wai as Wai
import qualified Network.Wai.Handler.Warp as Warp
import qualified Pipes.Prelude as P

import Symantic.HTTP
import Symantic.HTTP.Server
import Symantic.HTTP.Pipes ()

import API (api)

-- | Derive an application from the handlers of the server.
app :: Wai.Application
app = server api $
  route_succ :!:
  route_countdown
  where
  route_succ n =
    return $ n+1
  
  route_countdown n =
    return $
      (`P.unfoldr` 1) $ \i ->
        if i <= n
        then do
          MC.exec @IO $ do
            putStrLn $ "wait 1s to send: "<>show i
            Concurrent.threadDelay 1000000
          return $ Right (i,i+1)
        else return $ Left ()

main :: IO ()
main = Warp.run 8080 app