{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreicmeawkkx7bbwsfpigfbstcqounkmulmdveewkri2vjo7ui56iwbm",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mehyeefcaij2"
  },
  "path": "/t/botan-bindings-devlog/6855?page=10#post_194",
  "publishedAt": "2026-02-09T23:50:49.000Z",
  "site": "https://discourse.haskell.org",
  "textContent": "This is a great write-up. I really appreciate how clearly you separate “incidental ugliness” from the parts that are genuinely forced by CApiFFI and type safety. The BotanRNGStruct / BotanRNG / RNG layering reads much less like over-engineering once you walk through the constraints.\n\nThe framing of mkBindings as an early, ad-hoc memory abstraction really resonates. Given that you now have Memory.Memory and Memory.Pointer, it feels like the natural evolution rather than a breaking redesign—using the right primitives once they exist.\n\nI also like the point about polymorphism over return types being a feature gain, not just cleanup. That kind of payoff usually signals the refactor is doing real work.\n\nDeleting mkBindings once it’s redundant sounds like a net win for maintainability. Very curious to see how cleanly this pattern carries over to the other Botan context objects.",
  "title": "Botan bindings devlog"
}