packages feed

symantic-http-0.0.0.20190324: symantic-http.cabal

name: symantic-http
-- PVP:  +-+------- breaking API changes
--       | | +----- non-breaking API additions
--       | | | +--- code changes with no API change
version: 0.0.0.20190324
category: Protocol
synopsis: Symantic combinators for deriving clients or a server from an HTTP API
description:
  An extensible, typed and embedded Domain-Specific Language (DSL)
  to build Web services using a write-an-API-then-derive-code-from-it approach
  as in <https://hackage.haskell.org/package/servant servant>'s,
  but with term-level combinators instead of type-level combinators.
  .
  In this approach, writting an API can be understood
  like the writing of a printf's or scanf's format:
  such that deriving a client is like calling printf on both this format
  and arguments type-checking against the given format,
  and deriving a server is like calling scanf on both this format
  and handlers type-checking against the given format.
  .
  * For building an HTTP client (request building and response decoding)
    based upon <https://hackage.haskell.org/package/http-client http-client>,
    see <https://hackage.haskell.org/package/symantic-http-client symantic-http-client>.
  * For building an HTTP server (request routing and response building)
    based upon <https://hackage.haskell.org/package/warp warp>,
    see <https://hackage.haskell.org/package/symantic-http-server symantic-http-server>.
  * For streaming data (running effects (eg. in IO) during the transfer)
    using <https://hackage.haskell.org/package/pipes pipes>,
    see <https://hackage.haskell.org/package/symantic-http-pipes symantic-http-pipes>.
  .
  For learning how to use this library, you can read the demo example
  in <https://hackage.haskell.org/package/symantic-http-demo symantic-http-demo>.
  .
  WARNING: Be aware that this library is young
  (thus its interface can change without warnings and delays),
  has no community explicitely committed to support it (thus can die without warning),
  is poorly tested (thus even less ready for serious work),
  and — last but not least — is yours as a common for the commons
  (with the help of its <http://www.gnu.org/licenses GNU GPLv3> license).
  .
  Users of this library can be grateful to the <https://hackage.haskell.org/package/servant servant>'s contributors
  whose work was helpful to have a concrete overview
  of the functionnalities this library could attain,
  and thank <http://okmij.org Oleg Kiselyov> whose (once again) mind-blowing (co-)work
  on <http://okmij.org/ftp/typed-formatting/ typed formatting>
  was helpful to overcome the limitation
  of <http://okmij.org/ftp/tagless-final/ one-type-parameter symantics>.
  Indeed the fundamental observation upon which this library is built
  is that <http://okmij.org/ftp/tagless-final/ one-type-parameter symantics> (repr a)
  (aka. Tagless-Final typed DSL — basically just a clever use of type classes and instances)
  can be augmented with an extension type (repr (a -> k) k)
  extending a function to the right — while forming a category.
  Which makes term-level combinators able to add arguments to a function
  within the type they will be instantiated to (repr),
  such that this library's combinators
  (that you can extend by just writing a new type class)
  can be used to write an API instantiable as:
  a function asking arguments to generate a client's request,
  or a function asking handlers to generate a server's response,
  or some documentation type, or any other type
  for which you can write the type class instances
  required by the API combinators you use.
extra-doc-files:
license: GPL-3
license-file: COPYING
stability: experimental
author:      Julien Moutinho <julm+symantic-http@autogeree.net>
maintainer:  Julien Moutinho <julm+symantic-http@autogeree.net>
bug-reports: Julien Moutinho <julm+symantic-http@autogeree.net>
-- homepage:

build-type: Simple
cabal-version: 1.24
tested-with: GHC==8.4.4
extra-source-files:
  stack.yaml
extra-tmp-files:

Source-Repository head
  location: git://git.autogeree.net/symantic-http
  type:     git

Library
  exposed-modules:
    Symantic.HTTP
    Symantic.HTTP.API
    Symantic.HTTP.MIME
    Symantic.HTTP.URI
  default-language: Haskell2010
  default-extensions:
    AllowAmbiguousTypes
    DataKinds
    FlexibleContexts
    FlexibleInstances
    InstanceSigs
    LambdaCase
    MultiParamTypeClasses
    NamedFieldPuns
    NoImplicitPrelude
    RecordWildCards
    ScopedTypeVariables
    TupleSections
    TypeApplications
    TypeFamilies
    TypeOperators
  ghc-options:
    -Wall
    -Wincomplete-uni-patterns
    -Wincomplete-record-updates
    -fno-warn-tabs
    -- -fhide-source-paths
  build-depends:
      base >= 4.10 && < 5
    , bytestring >= 0.10
    , http-api-data >= 0.4
    , http-media >= 0.7
    , http-types >= 0.12
    , network-uri >= 2.6
    , stm >= 2.4.5
    , text >= 1.2
    , time >= 1.8
    , transformers >= 0.5