Automatic derivation of querying functions for servant

Stackage Nightly 2019-06-27:0.16@rev:2
Latest on Hackage:0.16@rev:2

See all snapshots servant-http-streams appears in

BSD-3-Clause licensed by Servant Contributors

Module documentation for 0.16

This version can be pinned in stack with:servant-http-streams-0.16@sha256:c047f207e177ddea3a0003b08cb69a9b4696b95bfbc00f53fcc6bc45799b7781,4360



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


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

import Data.Proxy
import Data.Text
import Servant.API
import Servant.HttpStreams

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

-- the IOException happens already in withClientEnvIO
main' :: IO ()
main' = do
    let burl = BaseUrl Http "localhost" 8081 ""
    withClientEnvIO burl $ \env -> do
        res <- runClientM getAllBooks env
        case res of
            Left err -> putStrLn $ "Error: " ++ show err
            Right books -> print books

main :: IO ()
main = return ()


comments powered byDisqus