use rand::rngs::SmallRng;
pub trait McmcModel {
type State;
type Sample: Send;
type Result;
fn init(&self, rng: &mut SmallRng) -> Self::State;
fn sweep(&self, state: &mut Self::State, rng: &mut SmallRng);
fn collect(&self, state: &Self::State) -> Self::Sample;
fn summarize(&self, samples: Vec<Self::Sample>) -> Self::Result;
}