servant/servant-server/servant-server.cabal
Gaël Deest 49c7dd2e8d Implement HasServer (NamedRoutes routes)
We define `ServerT (NamedRoutes api) m` as `api (AsServerT m)`, so that
the server of an record-defined API is a record of handlers.

The implementation piggy backs on the instance for “vanilla” servant
types with `(:<|>)`, using the `GServantProduct` for converting backd
and forth between the record / vanilla servers.

The main difficulty is that GHC needs to know that this operation is
legit, which can be expressed as the fact that:

```
GToServant (Rep (ServerT (NamedRoutes api))) m ~
ServerT (GToServant (Rep (api AsApi))) m
```

plus a few additional constraints.

This is easy enough for `route`, as we know that `m ~ Handler`. But in
the case of `hoistServerWithContext`, the two involved monads are
unknown ; in other words, this constraint needs to hold `forall m.`

Switching `-XQuantifiedConstraints` on is not sufficient, as our
constraints involve type families (`Rep` and `ServerT`). Our trick is to
use an intermediary typeclass, `GServer`, as a provider of evidence (in
the form of a `Dict`) that our constraints are indeed satisfied for a
particular monad.

The only instance of `GServer` is defined along with it, so it is
practically invisible to users.
2021-10-02 16:44:44 +02:00

170 lines
5.4 KiB
Text

cabal-version: >=1.10
name: servant-server
version: 0.18.3
synopsis: A family of combinators for defining webservices APIs and serving them
category: Servant, Web
description:
A family of combinators for defining webservices APIs and serving them
.
You can learn about the basics in the <http://docs.servant.dev/en/stable/tutorial/index.html tutorial>.
.
<https://github.com/haskell-servant/servant/blob/master/servant-server/example/greet.hs Here>
is a runnable example, with comments, that defines a dummy API and implements
a webserver that serves this API, using this package.
.
<https://github.com/haskell-servant/servant/blob/master/servant-server/CHANGELOG.md CHANGELOG>
homepage: http://docs.servant.dev/
bug-reports: http://github.com/haskell-servant/servant/issues
license: BSD3
license-file: LICENSE
author: Servant Contributors
maintainer: haskell-servant-maintainers@googlegroups.com
copyright: 2014-2016 Zalora South East Asia Pte Ltd, 2016-2019 Servant Contributors
build-type: Simple
tested-with: GHC ==8.6.5 || ==8.8.4 || ==8.10.2 || ==9.0.1
extra-source-files:
CHANGELOG.md
README.md
source-repository head
type: git
location: http://github.com/haskell-servant/servant.git
library
exposed-modules:
Servant
Servant.Server
Servant.Server.Experimental.Auth
Servant.Server.Generic
Servant.Server.Internal
Servant.Server.Internal.BasicAuth
Servant.Server.Internal.Context
Servant.Server.Internal.Delayed
Servant.Server.Internal.DelayedIO
Servant.Server.Internal.ErrorFormatter
Servant.Server.Internal.Handler
Servant.Server.Internal.RouteResult
Servant.Server.Internal.Router
Servant.Server.Internal.RoutingApplication
Servant.Server.Internal.ServerError
Servant.Server.StaticFiles
Servant.Server.UVerb
-- deprecated
exposed-modules:
Servant.Utils.StaticFiles
-- Bundled with GHC: Lower bound to not force re-installs
-- text and mtl are bundled starting with GHC-8.4
build-depends:
base >= 4.9 && < 4.16
, bytestring >= 0.10.8.1 && < 0.12
, constraints
, containers >= 0.5.7.1 && < 0.7
, mtl >= 2.2.2 && < 2.3
, text >= 1.2.3.0 && < 1.3
, transformers >= 0.5.2.0 && < 0.6
, filepath >= 1.4.1.1 && < 1.5
-- Servant dependencies
-- strict dependency as we re-export 'servant' things.
build-depends:
servant >= 0.18.3 && < 0.18.4
, http-api-data >= 0.4.1 && < 0.4.4
-- Other dependencies: Lower bound around what is in the latest Stackage LTS.
-- Here can be exceptions if we really need features from the newer versions.
build-depends:
base-compat >= 0.10.5 && < 0.12
, base64-bytestring >= 1.0.0.1 && < 1.3
, exceptions >= 0.10.0 && < 0.11
, http-media >= 0.7.1.3 && < 0.9
, http-types >= 0.12.2 && < 0.13
, network-uri >= 2.6.1.0 && < 2.8
, monad-control >= 1.0.2.3 && < 1.1
, network >= 2.8 && < 3.2
, sop-core >= 0.4.0.0 && < 0.6
, string-conversions >= 0.4.0.1 && < 0.5
, resourcet >= 1.2.2 && < 1.3
, tagged >= 0.8.6 && < 0.9
, transformers-base >= 0.4.5.2 && < 0.5
, wai >= 3.2.1.2 && < 3.3
, wai-app-static >= 3.1.6.2 && < 3.2
, word8 >= 0.1.3 && < 0.2
hs-source-dirs: src
default-language: Haskell2010
ghc-options: -Wall -Wno-redundant-constraints
executable greet
main-is: greet.hs
hs-source-dirs: example
ghc-options: -Wall
default-language: Haskell2010
build-depends:
base
, base-compat
, servant
, servant-server
, wai
, text
build-depends:
aeson >= 1.4.1.0 && < 1.6
, warp >= 3.2.25 && < 3.4
test-suite spec
type: exitcode-stdio-1.0
ghc-options: -Wall
default-language: Haskell2010
hs-source-dirs: test
main-is: Spec.hs
other-modules:
Servant.ArbitraryMonadServerSpec
Servant.Server.ErrorSpec
Servant.Server.Internal.ContextSpec
Servant.Server.Internal.RoutingApplicationSpec
Servant.Server.RouterSpec
Servant.Server.StaticFilesSpec
Servant.Server.StreamingSpec
Servant.Server.UsingContextSpec
Servant.Server.UsingContextSpec.TestCombinators
Servant.HoistSpec
Servant.ServerSpec
-- Dependencies inherited from the library. No need to specify bounds.
build-depends:
base
, base-compat
, base64-bytestring
, bytestring
, http-types
, mtl
, resourcet
, safe
, servant
, servant-server
, sop-core
, string-conversions
, text
, transformers
, transformers-compat
, wai
-- Additional dependencies
build-depends:
aeson >= 1.4.1.0 && < 1.6
, directory >= 1.3.0.0 && < 1.4
, hspec >= 2.6.0 && < 2.9
, hspec-wai >= 0.10.1 && < 0.12
, QuickCheck >= 2.12.6.1 && < 2.15
, should-not-typecheck >= 2.1.0 && < 2.2
, temporary >= 1.3 && < 1.4
, wai-extra >= 3.0.24.3 && < 3.2
build-tool-depends:
hspec-discover:hspec-discover >= 2.6.0 && <2.9