Go’s io package works so well because interfaces are implicit and lightweight.
In C, you can mimic the shape with function pointers, but you lose a lot of the ergonomics and safety. Curious how far you can push composability before it becomes too cumbersome to use in practice.