Composable probability distributions.
Create simple probability distributions.
```rust enum Coin { Heads, Tails, }
impl Coin {
fn flip() -> Distribution
let coin = Coin::flip(); assert_eq!(coin.pmf(&Coin::Heads), Probability(0.5)); ```
Compose operations over distributions using combinators.
```rust
fn reflipiftails(coin: Coin) -> Distribution
let coin = Coin::flip().andthen(reflipiftails); asserteq!(coin.pmf(&Coin::Heads), Probability(0.75)); ```
Compute summary statistics of random variables.
rust
let die = Distribution::uniform([1, 2, 3, 4, 5, 6]);
let ev = die.given(|&v| v <= 4).expectation();
assert_eq!(ev, 2.5);