-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Generic typeclasses for generating arbitrary ADTs
--   
--   Improve arbitrary value generation for ADTs
@package quickcheck-arbitrary-adt
@version 0.3.1.0


-- | Type classes to assist random generation of values for various types
--   of abstract data types.
module Test.QuickCheck.Arbitrary.ADT

-- | ConstructorArbitraryPair holds the construct name as a string and an
--   arbitrary instance of that constructor.
data ConstructorArbitraryPair a
ConstructorArbitraryPair :: String -> a -> ConstructorArbitraryPair a
[capConstructor] :: ConstructorArbitraryPair a -> String
[capArbitrary] :: ConstructorArbitraryPair a -> a

-- | ADTArbitrarySingleton holds the type name and one
--   ConstructorArbitraryPair.
data ADTArbitrarySingleton a
ADTArbitrarySingleton :: String -> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
[adtasModuleName] :: ADTArbitrarySingleton a -> String
[adtasTypeName] :: ADTArbitrarySingleton a -> String
[adtasCAP] :: ADTArbitrarySingleton a -> ConstructorArbitraryPair a

-- | ADTArbitrary holds the type name and a ConstructorArbitraryPair for
--   each constructor.
data ADTArbitrary a
ADTArbitrary :: String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
[adtModuleName] :: ADTArbitrary a -> String
[adtTypeName] :: ADTArbitrary a -> String
[adtCAPs] :: ADTArbitrary a -> [ConstructorArbitraryPair a]

-- | ToADTArbitrary generalizes the production of arbitrary values for Sum
--   types. and Product types.
class ToADTArbitrary a

-- | produce an arbitrary instance of one random constructor
toADTArbitrarySingleton :: ToADTArbitrary a => Proxy a -> Gen (ADTArbitrarySingleton a)

-- | produce an arbitrary instance of one random constructor
toADTArbitrarySingleton :: (ToADTArbitrary a, Generic a, GToADTArbitrarySingleton (Rep a)) => Proxy a -> Gen (ADTArbitrarySingleton a)

-- | produce an arbitrary instance for each constructor in type a.
toADTArbitrary :: ToADTArbitrary a => Proxy a -> Gen (ADTArbitrary a)

-- | produce an arbitrary instance for each constructor in type a.
toADTArbitrary :: (ToADTArbitrary a, Generic a, GToADTArbitrary (Rep a)) => Proxy a -> Gen (ADTArbitrary a)

-- | GToADTArbitrarySingleton creates an arbitrary value and returns the
--   name of the constructor that was used to create it and the type name.
class GToADTArbitrarySingleton rep
gToADTArbitrarySingleton :: GToADTArbitrarySingleton rep => Proxy rep -> Gen (ADTArbitrarySingleton (rep a))

-- | GToADTArbitrary is a typeclass for generalizing the creation of a list
--   of arbitrary values for each constructor of a type. It also returns
--   the name of the constructor and the type name for reference and file
--   creation.
class GToADTArbitrary rep
gToADTArbitrary :: GToADTArbitrary rep => Proxy rep -> Gen (ADTArbitrary (rep a))

-- | GArbitrary is a typeclass for generalizing the creation of single
--   arbitrary product and sum types. It creates an arbitrary generating
--   function of this style: <tt>TypeName &lt;$&gt; arbitrary &lt;*&gt;
--   arbitrary</tt>.
class GArbitrary rep
gArbitrary :: GArbitrary rep => Gen (rep a)

-- | Create a arbitrary generator for a specified a type in a naive way.
--   Please be careful when using this function, particularly for recursive
--   types.
genericArbitrary :: (Generic a, GArbitrary (Rep a)) => Gen a
instance GHC.Show.Show a => GHC.Show.Show (Test.QuickCheck.Arbitrary.ADT.ConstructorArbitraryPair a)
instance GHC.Read.Read a => GHC.Read.Read (Test.QuickCheck.Arbitrary.ADT.ConstructorArbitraryPair a)
instance GHC.Generics.Generic (Test.QuickCheck.Arbitrary.ADT.ConstructorArbitraryPair a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Test.QuickCheck.Arbitrary.ADT.ConstructorArbitraryPair a)
instance GHC.Show.Show a => GHC.Show.Show (Test.QuickCheck.Arbitrary.ADT.ADTArbitrarySingleton a)
instance GHC.Read.Read a => GHC.Read.Read (Test.QuickCheck.Arbitrary.ADT.ADTArbitrarySingleton a)
instance GHC.Generics.Generic (Test.QuickCheck.Arbitrary.ADT.ADTArbitrarySingleton a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Test.QuickCheck.Arbitrary.ADT.ADTArbitrarySingleton a)
instance GHC.Show.Show a => GHC.Show.Show (Test.QuickCheck.Arbitrary.ADT.ADTArbitrary a)
instance GHC.Read.Read a => GHC.Read.Read (Test.QuickCheck.Arbitrary.ADT.ADTArbitrary a)
instance GHC.Generics.Generic (Test.QuickCheck.Arbitrary.ADT.ADTArbitrary a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Test.QuickCheck.Arbitrary.ADT.ADTArbitrary a)
instance Test.QuickCheck.Arbitrary.ADT.GArbitrary GHC.Generics.U1
instance (Test.QuickCheck.Arbitrary.ADT.GArbitrary l, Test.QuickCheck.Arbitrary.ADT.GArbitrary r) => Test.QuickCheck.Arbitrary.ADT.GArbitrary (l GHC.Generics.:+: r)
instance (Test.QuickCheck.Arbitrary.ADT.GArbitrary l, Test.QuickCheck.Arbitrary.ADT.GArbitrary r) => Test.QuickCheck.Arbitrary.ADT.GArbitrary (l GHC.Generics.:*: r)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.ADT.GArbitrary (GHC.Generics.K1 i a)
instance Test.QuickCheck.Arbitrary.ADT.GArbitrary rep => Test.QuickCheck.Arbitrary.ADT.GArbitrary (GHC.Generics.M1 i t rep)
instance Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary GHC.Generics.U1
instance (Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary l, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary r) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary (l GHC.Generics.:+: r)
instance (Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton l, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton r) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary (l GHC.Generics.:*: r)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary (GHC.Generics.K1 i a)
instance (GHC.Generics.Constructor c, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary rep) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary (GHC.Generics.M1 GHC.Generics.C c rep)
instance (GHC.Generics.Datatype t, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary rep) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary (GHC.Generics.M1 GHC.Generics.D t rep)
instance Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary rep => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrary (GHC.Generics.M1 GHC.Generics.S t rep)
instance Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton GHC.Generics.U1
instance (Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton l, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton r) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton (l GHC.Generics.:+: r)
instance (Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton l, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton r) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton (l GHC.Generics.:*: r)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton (GHC.Generics.K1 i a)
instance (GHC.Generics.Constructor c, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton rep) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton (GHC.Generics.M1 GHC.Generics.C c rep)
instance (GHC.Generics.Datatype t, Data.Typeable.Internal.Typeable t, Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton rep) => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton (GHC.Generics.M1 GHC.Generics.D t rep)
instance Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton rep => Test.QuickCheck.Arbitrary.ADT.GToADTArbitrarySingleton (GHC.Generics.M1 GHC.Generics.S t rep)
instance GHC.Base.Functor Test.QuickCheck.Arbitrary.ADT.ADTArbitrary
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Arbitrary.ADT.ADTArbitrary a)
instance GHC.Base.Functor Test.QuickCheck.Arbitrary.ADT.ADTArbitrarySingleton
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Arbitrary.ADT.ADTArbitrarySingleton a)
instance GHC.Base.Functor Test.QuickCheck.Arbitrary.ADT.ConstructorArbitraryPair
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Arbitrary.ADT.ConstructorArbitraryPair a)
