Practical probabilistic programming with monads
A model-learner pattern for bayesian reasoning