use strafe_type::{LogProbability64, Probability64, Real64};
use crate::traits::RNG;
pub trait Distribution {
fn density<R: Into<Real64>>(&self, x: R) -> Real64;
fn log_density<R: Into<Real64>>(&self, x: R) -> Real64;
fn probability<R: Into<Real64>>(&self, q: R, lower_tail: bool) -> Probability64;
fn log_probability<R: Into<Real64>>(&self, q: R, lower_tail: bool) -> LogProbability64;
fn quantile<P: Into<Probability64>>(&self, p: P, lower_tail: bool) -> Real64;
fn log_quantile<LP: Into<LogProbability64>>(&self, p: LP, lower_tail: bool) -> Real64;
fn random_sample<R: RNG>(&self, rng: &mut R) -> Real64;
}