Skip to content

Instantly share code, notes, and snippets.

@domenkozar
Last active April 20, 2018 13:24
Show Gist options
  • Save domenkozar/b5f2a03ea4a2dd7967226deec7bbaff5 to your computer and use it in GitHub Desktop.
Save domenkozar/b5f2a03ea4a2dd7967226deec7bbaff5 to your computer and use it in GitHub Desktop.
#!/usr/bin/env nix-shell
#!nix-shell -i runghc -p "haskellPackages.ghcWithPackages (pkgs: with pkgs; [servant-generic servant-client])"
#!nix-shell -I nixpkgs=http://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson.Types
import Data.Text
import Data.Time (UTCTime)
import Data.Time.Calendar
import GHC.Generics
import Servant.API
import Servant
import Servant.Client
import Servant.Generic
import Network.HTTP.Client (newManager, defaultManagerSettings)
data Site route = Site
{ about :: route :-
Capture "x" Text :> Get '[JSON] Text
, faq :: route :-
Capture "x" Int :> ToServant (SubSite route)
} deriving Generic
data SubSite route = SubSite
{ home :: route :-
Get '[JSON] Text
}
type UserAPI = ToServant (Site AsApi)
userAPI :: Proxy UserAPI
userAPI = Proxy
data AsClient
type instance AsClient :- api = Client ClientM api
myClient :: Site AsClient
myClient = fromServant (client userAPI)
main :: IO ()
main = do
manager <- newManager defaultManagerSettings
let env = mkClientEnv manager $ BaseUrl Http "localhost" 8090 ""
res <- runClientM (about myClient "3") env
case res of
Left err -> putStrLn $ "Error: " ++ show err
Right books -> print books
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment