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