pub trait Io {
type Value: Copy + PartialEq + BitAnd<Output = Self::Value> + BitOr<Output = Self::Value> + Not<Output = Self::Value>;
fn read(&self) -> Self::Value;
fn write(&mut self, value: Self::Value);
fn readf(&self, flags: Self::Value) -> bool { ... }
fn writef(&mut self, flags: Self::Value, value: bool) { ... }
}