pub trait MaterialCompile<S, R, T>where
S: Write,{
// Required method
fn compile_to(&self, output: &mut S, state: T) -> Result<()>;
// Provided method
fn compile(&self, state: T) -> Result<R>
where S: Default + Into<Result<R>> { ... }
}