# probable: Easy and reasonably efficient probabilistic programming and random generation

**This is a package candidate release!** Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

**Warnings:**

- 'ghc-options: -O2' is rarely needed. Check that it is giving a real benefit and not just imposing longer compile times on your users.

Easy and reasonably efficient probabilistic programming and random generation

This library gives a common language to speak about
probability distributions and
random generation, by wrapping both, when necessary,
in a `RandT`

monad defined in `Math.Probable.Random`

.
This module also provides a lot of useful little
combinators for easily describing how random values for your
types should be generated.

In `Math.Probable.Distribution`

, you'll find functions for generating
random values that follow any distribution supported by
mwc-random.

In `Math.Probable.Distribution.Finite`

, you'll find an adaptation
of Eric Kidd's work on probability monads (from
here).

You may want to check the examples bundled with this package, viewable online at https://github.com/alpmestan/probable/tree/master/examples. One of these examples is simple enough to be worth reproducing here.

module Main where import Control.Applicative import Control.Monad import Math.Probable import qualified Data.Vector.Unboxed as VU data Person = Person Int -- ^ age Double -- ^ weight (kgs) Double -- ^ salary (e.g euros) deriving (Eq, Show) person :: RandT IO Person person = Person <$> uniformIn (1, 100) <*> uniformIn (2, 130) <*> uniformIn (500, 10000) randomPersons :: Int -> IO [Person] randomPersons n = mwc $ listOf n person randomDoubles :: Int -> IO (VU.Vector Double) randomDoubles n = mwc $ vectorOf n double main :: IO () main = do randomPersons 10 >>= mapM_ print randomDoubles 10 >>= VU.mapM_ print

Please report any feature request or problem, either by email or through github's issues/feature requests.

[Skip to ReadMe]

## Properties

Versions | 0.1.0.0, 0.1.1, 0.1.2, 0.1.3, 0.1.3 |
---|---|

Change log | None available |

Dependencies | base (>=4.5 && <5), mtl, mwc-random (>=0.10), primitive (>=0.6), statistics (>=0.14), transformers (>=0.3), vector (>=0.10) [details] |

License | BSD-3-Clause |

Copyright | 2014-2016 Alp Mestanogullari |

Author | Alp Mestanogullari |

Maintainer | alpmestan@gmail.com |

Category | Math, Statistics |

Home page | http://github.com/alpmestan/probable |

Bug tracker | http://github.com/alpmestan/probable/issues |

Source repository | head: git clone https://github.com/alpmestan/probable.git |

Uploaded | Sun Feb 11 11:44:34 UTC 2018 by AlpMestanogullari |

## Modules

[Index]

## Downloads

- probable-0.1.3.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)

#### Maintainers' corner

For package maintainers and hackage trustees