{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreialcbwprxx7wx4j2kkex4ngnq2bjtsucw5l7ky3tuz7xrk2r2be4u",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mh3auikh5yd2"
  },
  "path": "/t/sneak-peek-bolt-math/13766#post_16",
  "publishedAt": "2026-03-15T01:33:15.000Z",
  "site": "https://discourse.haskell.org",
  "textContent": "It seems to me that you might be able to get the flexibility that you need and preserve type inference in the common case, if you use the operators as constrained aliases for the heterogeneous word form:\n\n\n    class Addition a b where\n      type Sum a b :: Type\n      plus :: a -> b -> Sum a b\n\n    -- | Constrained version of 'plus', for arithmetic convenience.\n    (+) :: (Addition a a, Sum a a ~ a) => a -> a -> a\n    (+) = plus\n",
  "title": "Sneak Peek: Bolt Math"
}