{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreifkmua5joettc4x67irjwypipramdal3krbazrckdvicnoxn4356e",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mldspemo2m62"
  },
  "path": "/t/category-transformers/14054#post_2",
  "publishedAt": "2026-05-08T12:42:30.000Z",
  "site": "https://discourse.haskell.org",
  "textContent": "I’m no category theorist but I enjoyed this elaboration on Chris Penner’s excellent posts. It’s cool to see where we can go further.\n\nThere are a couple of typos jsyk; you start using `ProKleisliT` when the type is initially defined as `ProKleisli`.\n\nThe end types are a little unwieldy, but I do note that they should stack fairly easily; I wonder whether an Effectful-style type level list would let you abstract that horrid stacking. I also like that you can put IO anywhere in the stack, which just seems nice and symmetrical.\n\nDo the effects of “later” computations get skipped if you have an earlier failing computation? For example, in the transformer example you ask for the environment variable then the user input which you subsequently parse; if you asked for user input, then parsed, then asked for the environment variable, would that last computation not be run?",
  "title": "Category transformers"
}