{
"$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"
}