Servant types for defining API with relational DBs

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow to host generated Haddocks.

BSD3 licensed by Anton Gushcha
Maintained by


The idea of package is to provide servant-like DSL for specifying an API for functions stored in RDBMS.

data RegisterUser = RegisterUser {
  userName :: Text
, userPassword :: Text
, userPhone :: Phone
, userEmail :: Email

type API = 
       ArgNamed "user" RegisterUser
    :> ArgNamed "isAdmin" Bool
    :> Procedure "registerUser" (Maybe (Only UserId))
  :<|> ArgPos UserId
    :> Procedure "getUser" (Maybe User)
  :<|> Procedure "listUsers" [User]

The library adds three custom combinators: * ArgNamed name a - named argument of stored function of type a.

  • ArgPos a - unamed argument of stored function of type a.

  • Procedure name a - named stored function with return type a.

Related libraries:


  • Fix Servant.API.DB.Procedure documentation.

  • Split Arg to ArgNamed and ArgPos.

  • Add Default type wrapper.

  • Initial release
Depends on 2 packages:
Used by 1 package:
comments powered byDisqus