use a non-empty list structure for the distribution more efficient data structure, we will run into the 'monad instance for Data.Set' problem see http://www.randomhacks.net/articles/2007/03/15/data-set-monad-haskell-macros it's certainly better to provide a 'collaps' function for removing duplicates use monad functions instead of custom Dist functions check where 'collaps' must be applied separate module name space generalize ToFloat class to Num use pretty printer in PrintList? current Show instance is nice for single Dist values, but not for (Dist a, Dist b) et.al. simplify examples (boys, monty hall et.al.) replace RandomIO by Random and State monad QuickCheck properties