packages feed

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

{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# OPTIONS_GHC -Wno-missing-signatures #-}
module Main where
import Data.Maybe (fromJust)
import qualified Control.Monad.Classes as MC
import qualified Network.HTTP.Client as Client
import qualified Pipes as P

import Symantic.HTTP
import Symantic.HTTP.Client
import Symantic.HTTP.Pipes ()

import API (api)

-- | Derive the callers of the client.
client_succ
 :!: client_countdown
 = client api

main :: IO ()
main = do
  manager <- Client.newManager Client.defaultManagerSettings
  let baseURI = fromJust $ parseURI "http://localhost:8080"
  let env = clientEnv manager baseURI
  
  print =<< runClient env (client_succ 42)
  
  (print =<<) $ runClientStream env (client_countdown 4) $ \pipe ->
    P.runEffect $
      P.for pipe $ \i ->
        MC.exec @IO $ print i