{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigacphqj2p33xbvgokwqx7h2q2avxxdcz4cb7dm6tzpki2x3px4uy",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mmyicbsuvaa2"
},
"path": "/t/homomorphic-static-analysis/14146#post_9",
"publishedAt": "2026-05-29T10:02:47.000Z",
"site": "https://discourse.haskell.org",
"textContent": "maralorn:\n\n> Can you make a bit more explicit what you mean with me aiming for “pointfree” style?\n\nThe problem with monads for the purpose of static analysis is (from a certain perspective) that the monadic bind function `>>=` is not point-free. Its second argument could be a lambda that binds a variable. Switching to (Kleisli) categories means you only allow function composition and identity functions (both pointfree). Strong and Choice are similarly pointfree. The `Arrow` class allows lifting pointful functions to your category, but they are confined to the `arr` method (and even this confinement is not enough for all analyses as you write in your comment).\n\nThe arrow syntax does find a nice subset of syntax where the compiler can translate pointful programs to the pointfree arrow style, but this introduces a non-trivial translation which in my opinion complicates everything. For example, it is impossible to (exactly) pretty print programs written in arrow notation to their original syntax.\n\nInstead, I think we should just reckon with overloaded variable binding once and for all and avoid the complicating pointfree translation.",
"title": "Homomorphic static analysis"
}