I feel I won’t truly understand Rust until I understand the design decisions behind the standard library. So for my first question here:
Why is BufReader generic over rather than <R: Read>? As new() is only defined in an impl<R: Read> block there’s no way to create a BufReader over a type that doesn’t implement Read. Is it just to avoid BufReader having to specify Read again when implementing other traits (for example, with impl<R: Seek> rather than impl<R: Read + Seek>)? Or is there a benefit for users of BufReader?