servant/servant-client
Oleg Grenrus a1a99552b5 Changelog and cabal file edits
- Add #1079, #1011 entry
- Stricter internal dependencies
- Unify .cabal files
- Correct -conduit, -machines, -pipes changelog
- Fix years in LICENSEs
- Remove tinc.yamls
- Tweaks to 0.15 changelog
- Add changelogs for all packages
- Add changelogs for new packages (extra-source-files)
2018-11-13 09:58:42 +02:00
..
src/Servant Add runClientM for streaming-client 2018-11-09 20:22:47 +02:00
test Separate Servant.Client.Streaming 2018-11-08 17:58:21 +02:00
CHANGELOG.md Changelog and cabal file edits 2018-11-13 09:58:42 +02:00
docs.sh prepare merge 2015-04-20 11:15:58 +02:00
LICENSE Changelog and cabal file edits 2018-11-13 09:58:42 +02:00
README.lhs servant-client: update README.md and test it 2018-04-18 14:18:41 +01:00
README.md servant-client: update README.md and test it 2018-04-18 14:18:41 +01:00
servant-client.cabal Changelog and cabal file edits 2018-11-13 09:58:42 +02:00
Setup.hs stylish haskell changes 2015-08-18 00:07:12 +02:00

servant-client

servant

This library lets you automatically derive Haskell functions that let you query each endpoint of a servant webservice.

Example

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}

import Data.Proxy
import Data.Text
import Network.HTTP.Client (newManager, defaultManagerSettings)
import Servant.API
import Servant.Client


type Book = Text

type MyApi = "books" :> Get '[JSON] [Book] -- GET /books
        :<|> "books" :> ReqBody '[JSON] Book :> Post '[JSON] Book -- POST /books

myApi :: Proxy MyApi
myApi = Proxy

-- 'client' allows you to produce operations to query an API from a client.
postNewBook :: Book -> ClientM Book
getAllBooks :: ClientM [Book]
(getAllBooks :<|> postNewBook) = client myApi


main :: IO ()
main = do
  manager' <- newManager defaultManagerSettings
  res <- runClientM getAllBooks (mkClientEnv manager' (BaseUrl Http "localhost" 8081 ""))
  case res of
    Left err -> putStrLn $ "Error: " ++ show err
    Right books -> print books