Changelog for servant-0.14
The latest version of this document is on GitHub.
0.14
Signifacant changes
-
Streamtakes a status code argument-Stream method framing ctype a +Stream method status framing ctype a -
ToStreamGeneratordefinition changed, so it's possible to write an instance for conduits.-class ToStreamGenerator f a where - toStreamGenerator :: f a -> StreamGenerator a +class ToStreamGenerator a b | a -> b where + toStreamGenerator :: a -> StreamGenerator b(#959)
-
Added
NoFramingstreaming strategy (#959) -
servant-client-core Free
Clientimplementation. Useful for testingHasClientinstances. (#920) -
servant-client-core Add
hoistClienttoHasClient. Just likehoistServerallows us to change the monad in which request handlers of a web application live in, we also havehoistClientfor changing the monad in which client functions live. Read tutorial section for more information. (#936)iF you have own combinators, you'll need to define a new method of
HasClientclass, for example:type Client m (MyCombinator :> api) = MyValue :> Client m api hoistClientMonad pm _ nt cl = hoistClientMonad pm (Proxy :: Proxy api) nt . cl -
servant Add
safeLink' :: (Link -> a) -> ... -> MkLink endpoint a, which allows to create helpers returning something else thanLink. (#968) -
servant-server File serving in polymorphic monad. i.e. Generalised types of
serveDirectoryFileServeretc functions inServant.Utils.StaticFiles(#953) -
servant-server
ReqBodycontent type check is recoverable. This allows writing APIs like:ReqBody '[JSON] Int :> Post '[PlainText] Int :<|> ReqBody '[PlainText] Int :> Post '[PlainText] Intwhich is useful when handlers are subtly different, for example may do less work. (#937)
-
servant-client Add more constructors to
RequestBody, includingRequestBodyStream. Note: we are looking for http-library agnostic API, so the might change again soon. Tell us which constructors are useful for you! (#913)
Other changes
-
GetHeadersinstances implemented withoutOverlappingInstances(#971) -
Added tests or enabled tests (#975)
-
Add
servant-flatten"spice" to the structuring api recipe (#929)
Note
(VIM) Regular-expression to link PR numbers: s/\v#(\d+)/[#\1](https:\/\/github.com\/haskell-servant\/servant/pull\/\1)/
0.13.0.1
- Support
base-compat-0.10
0.13
Significant changes
-
Streaming endpoint support. (#836)
type StreamApi f = "streamGetNewline" :> StreamGet NewlineFraming JSON (f Person)See tutorial for more details
-
servant Add
Servant.API.Modifiers(#873 #903)QueryParam,HeaderandReqBodyunderstand modifiers:RequiredorOptional(resulting inaorMaybe ain handlers)StrictorLenient(resulting inaorEither String ain handlers)
Also you can use
Descriptionas a modifier, but it doesn't yet work withservant-docs, onlyservant-swagger. There is an issue. -
servant-client Support
http-client’sCookieJar(#897 #883)ClientMpreserves cookies between requests, if given initialCookieJar. To migrate from older code, changeClientEnvconstructor tomkClientEnvwhich makesClientEnvwithoutCookieJar. -
servant Mono-kind-ise modifiers, resulting in better error messages. (#887 #890)
-
servant Add
TypeError ... => HasServers instances in GHC-8.2 for not saturated modifiers (Capture "foo" :> ...) or->in place of:>. (#893) -
Cookbook example projects at http://haskell-servant.readthedocs.io/en/master/cookbook/index.html (#867 #892)
Other changes
-
servant Links aren't double escaped (#878)
0.12.1
Bug fixes
0.12
Significant changes
-
servant-client servant-client-core Factored out of
servant-clientall the functionality that was independent of thehttp-clientbackend. (#803 #821)If you have own combinators, you'll need to add an additional
margument inHasClient,ClientandclientWithRoute:-class HasClient api - type Client (api :: *) :: * - clientWithRoute :: Proxy api -> Req -> Client api +class HasClient m api + type Client (m :: * -> *) (api :: *) :: * + clientWithRoute :: Proxy m -> Proxy api -> Request -> Client m apiSee https://github.com/haskell-servant/servant-auth/pull/67/commits/f777818e3cc0fa3ed2346baff8328e96d62b1790 for a real world example.
-
servant-server Added
hoistServermember to theHasServerclass, which isHasServerspecificenter. (#804 #824)enterisn't exported fromServantmodule anymore. You can changeentertohoistServerin a straight forward way. Unwrap natural transformation and add a api typeProxy:-server = enter (NT nt) impl +server = hoistServer (Proxy :: Proxy MyApi) nt implIf you have own combinators, you'll need to define a new method of
HasServerclass, for example:type ServerT (MyCombinator :> api) m = MyValue -> ServerT api m hoistServerWithContext _ pc nt s = hoistServerWithContext (Proxy :: Proxy api) pc nt . sSee https://github.com/haskell-servant/servant-auth/pull/67/commits/8ee3b6315247ac076516213fd7cfcdbfdb583ac9 for a real world example.
-
Add
DescriptionandSummarycombinators (#767)It's possible to annotate endpoints with free form text. This information is used by e.g. by
servant-swagger, see screenshot in https://github.com/phadej/servant-swagger-ui -
Lower
:>and:<|>infix precedence to 4 and 3 respectively (#761)This shouldn't affect you, except if you define your own infix operators for Servant type-level DSL.
Other changes
- servant-foreign Derive
Datafor all types (#809) - servant-docs Add authentication lenses (#787)
- servant-docs Generated markdown improvements (#813 #767 #790 #788)
- Add
addLinksto generate all links for unnested APIs. (#851) - Allow newest dependencies (#772 #842)
- Documentation improvements and typo fixes (#757 #771 #775 #790 #791 #806)
- Development process improvements (#764 #839)
0.11
Breaking changes
Other changes
- Add a type representing an empty API (#753)
- Add
linkURI'andLinkaccessors (#745 , #717 , #715) - Prepare for GHC-8.2 (#722)
- Add
HasLink AuthProtectinstance (#720) AllCTRender [] ()TypeError(useNoContent) (#671)- Documentation improvements and typo fixes (#702 , #709 , #716 , #725 , #727)
0.10
Breaking changes
-
Use
NTfromnatural-transformationforEnter(#616) -
Change to
MkLink (Verb ...) = Link(previouslyURI). To consumeLinkuse itsToHttpApiDatainstance orlinkURI. (#527)
Other changes
-
Add
Servant.API.TypeLevelmodule with type families to work with API types. (#345 , #305) -
Default JSON content type change to
application/json;charset=utf-8. (#263) Related browser bugs: Chromium and Firefox -
Acceptclass may accept multiple content-types.MimeUnrenderadopted as well. (#613 , #615)
0.9.1
- Added 'noHeader' function for not adding response headers.
0.9
- Added Eq, Show, Read, Generic and Ord instances to IsSecure
- BACKWARDS INCOMPATIBLE: replace use of
ToFromByteStringwithTo/FromHttpApiDataforGetHeaders/BuildHeadersTo - BACKWARDS INCOMPATIBLE: Moved
From/ToFormUrlEncodedclasses, which were renamed toFrom/ToFormtohttp-api-data
0.8.1
- Add
CaptureAllcombinator. Captures all of the remaining segments in a URL. - Add
Servant.API.TypeLevelmodule, with frequently used type-level functionaliy.
0.8
- Minor fixes, documentation changes and cabal tweaks
0.7.1
- Add module
Servant.Utils.Enter(https://github.com/haskell-servant/servant/pull/478) - Allow to set the same header multiple times in responses.
0.5
- Add
WithNamedConfigcombinator. - Add
HttpVersion,IsSecure,RemoteHostandVaultcombinators - Fix safeLink, so Header is not in fact required.
- Add more instances for (:<|>)
- Use
http-api-datainstead ofServant.Common.Text - Remove matrix params.
- Add PlainText String MimeRender and MimeUnrender instances.
- Add new
Verbscombinator, and make all existing and new verb combinators type synonyms of it. - Add
BasicAuthcombinator to support Basic authentication - Add generalized authentication support
0.4.2
- Fix missing cases for
PatchinsafeLink
0.4.1
- Allow whitespace after parsing JSON
- Stricter matching for
safeLinkforCapture
0.4
Deletenow is likeGet,Post,Put, andPatchand returns a response body- Multiple content-type/accept support for all the relevant combinators
- Provide JSON, PlainText, OctetStream and FormUrlEncoded content types out of the box
- Type-safe link generation to API endpoints
- Support for the PATCH HTTP method
- Removed the home-made QuasiQuote for writing API types in a more human-friendly format until we come up with a better design for it
- Make most if not all of the haddock code examples run through doctest
- Some general code cleanup
- Add response headers