{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreibhbw6hx62cbo2njt73fa2r7gzxodti2jfnj63itrbwzgvnucejtu",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mivd6pm6byi2"
},
"path": "/t/http-tower-hs-a-rust-tower-inspired-middleware-library-for-haskell/13892#post_7",
"publishedAt": "2026-04-06T17:03:44.000Z",
"site": "https://discourse.haskell.org",
"tags": [
"GitHub - jarlah/tower-hs · GitHub"
],
"textContent": "Following up on the monorepo refactoring I mentioned, the library is now published as three separate packages on Hackage:\n\n * tower-hs — The generic Service/Middleware core. Protocol-agnostic middleware (retry, timeout, circuit breaker, hedge, filter,\ntracing, logging, etc.). Not tied to HTTP at all, works with any req → IO (Either ServiceError res) service.\n * http-tower-hs — HTTP client middleware built on tower-hs (bearer auth, headers, redirects, request IDs, status validation,\nOTel tracing).\n * servant-tower-hs — Servant ClientMiddleware adapter, so you can use the full tower-hs middleware stack with Servant clients,\nplus servant-specific middleware.\n\n\n\nThe idea is that tower-hs is a standalone foundation you can use to wrap anything, a database client, a gRPC stub, a message queue, with the same resilience patterns. The HTTP and Servant packages layer on top with transport-specific concerns.\n\nYou can depend on just the packages you need, e.g. only tower-hs if you’re wrapping non-HTTP services.\n\nRepo: GitHub - jarlah/tower-hs · GitHub",
"title": "Http-tower-hs — A Rust Tower-inspired middleware library for Haskell"
}