{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreibhbw6hx62cbo2njt73fa2r7gzxodti2jfnj63itrbwzgvnucejtu",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3miurjc2cpf52"
  },
  "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"
}