{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreicapywt7fr2pj436xbf3hiwb7eu7iblufw6uqhshbu63yykae42gy",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mn7trqj5je52"
  },
  "path": "/t/homomorphic-static-analysis/14146#post_15",
  "publishedAt": "2026-06-01T08:27:13.000Z",
  "site": "https://discourse.haskell.org",
  "tags": [
    "overloaded package"
  ],
  "textContent": "maralorn:\n\n> Yes, that’s exactly what I tried and which I couldn’t figure out. I need to somehow detect that `Compose (First ...) (Second ...)` is the same as `Compose (First ...) (Fun id (Second ...))` unless I want to hurt Arrow/Profunctor laws and I have no idea how to do that, because I can’t do an equality check on `a -> a`.\n\nThe overloaded package provides compiler plugins, one of them is for better Arrow desugaring and avoiding the `arr` combinator.\n\nYou could use this, if you’re willing to depend on a GHC compiler plugin. You could have `overloaded:categories` desugar into your own Operation DSL, which may then implement `Eq`.",
  "title": "Homomorphic static analysis"
}