{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreif3bolxur5zgjw5wnl7a5lqvllwoa24kryrq4gpbaze4mbofbb3r4",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mlgdanm64c32"
  },
  "path": "/t/category-transformers/14054#post_7",
  "publishedAt": "2026-05-09T11:36:18.000Z",
  "site": "https://discourse.haskell.org",
  "textContent": "Monad stacks are successful because they allow overloading `IO` with magical properties, chiefly global contexts and early exit. These are preferred over argument passing and pattern matching respectively, removing both the logarithmic avalanche of upstream adjustments caused by function type changes and the annoying rightward code drift. This style of programming apes imperative languages, so it’s already familiar to most newcomers, thus job-friendly, and jobs feed back into the ecosystem.\n\nThe goal of arrows seems to be to specify computations more granularly, but that’s not a common concern, especially among those using monad stacks.",
  "title": "Category transformers"
}