# Control.Monad.Gen

- Package
- gen
- Repository
- purescript/purescript-gen

### #frequency Source

`frequency :: forall m f a. MonadGen m => Foldable1 f => f (Tuple Number (m a)) -> m a`

Creates a generator that outputs a value chosen from a selection of existing generators, where the selection has weight values for the probability of choice for each generator. The probability values will be normalised.

### #unfoldable Source

`unfoldable :: forall m f a. MonadRec m => MonadGen m => Unfoldable f => m a -> m (f a)`

Creates a generator that produces unfoldable structures based on an existing generator for the elements.

The size of the unfoldable will be determined by the current size state
for the generator. To generate an unfoldable structure of a particular
size, use the `resize`

function from the `MonadGen`

class first.

## Re-exports from **Control.**Monad.Gen.Class

### #MonadGen Source

`class MonadGen :: (Type -> Type) -> Constraint`

`class (Monad m) <= MonadGen m where`

A class for random generator implementations.

Instances should provide implementations for the generation functions that return choices with uniform probability.

See also `Gen`

in `purescript-quickcheck`

, which implements this
type class.

#### Members

`chooseInt :: Int -> Int -> m Int`

`chooseFloat :: Number -> Number -> m Number`

Chooses an floating point number in the specified (inclusive) range.

`chooseBool :: m Boolean`

Chooses a random boolean value.

`resize :: forall a. (Size -> Size) -> m a -> m a`

Modifies the size state for a random generator.

`sized :: forall a. (Size -> m a) -> m a`

Runs a generator, passing in the current size state.

Chooses an integer in the specified (inclusive) range.