packages feed

generic-random-0.4.1.0: README.md

Generic random generators [![Hackage](https://img.shields.io/hackage/v/generic-random.svg)](https://hackage.haskell.org/package/generic-random) [![Build Status](https://travis-ci.org/Lysxia/generic-random.svg)](https://travis-ci.org/Lysxia/generic-random)
=========================

Say goodbye to `Constructor <$> arbitrary <*> arbitrary <*> arbitrary`-boilerplate.

```haskell
    {-# LANGUAGE DeriveGeneric #-}

    import GHC.Generics ( Generic )
    import Test.QuickCheck
    import Generic.Random.Generic

    data Tree a = Leaf | Node (Tree a) a (Tree a)
      deriving (Show, Generic)

    instance Arbitrary a => Arbitrary (Tree a) where
      arbitrary = genericArbitrary' Z uniform

    -- Equivalent to
    -- > arbitrary =
    -- >   sized $ \n ->
    -- >     if n == 0 then
    -- >       return Leaf
    -- >     else
    -- >       oneof
    -- >         [ return Leaf
    -- >         , Node <$> arbitrary <*> arbitrary <*> arbitrary
    -- >         ]

    main = sample (arbitrary :: Gen (Tree ()))
```

- User-specified distribution of constructors, with a compile-time check that
  weights have been specified for all constructors.
- A simple (optional) strategy to ensure termination: `Test.QuickCheck.Gen`'s
  size parameter decreases at every recursive `genericArbitrary'` call; when it
  reaches zero, sample directly from a finite set of finite values.