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)); ```