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