{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Test.QuickCheck.Arbitrary.ADT (
ConstructorArbitraryPair(..)
, ADTArbitrarySingleton(..)
, ADTArbitrary(..)
, ToADTArbitrary(..)
, GToADTArbitrarySingleton(..)
, GToADTArbitrary(..)
, GArbitrary(..)
, genericArbitrary
) where
import Data.Typeable
import GHC.Generics
import Test.QuickCheck.Arbitrary
import Test.QuickCheck.Gen
data ConstructorArbitraryPair a =
ConstructorArbitraryPair
{ ConstructorArbitraryPair a -> String
capConstructor :: String
, ConstructorArbitraryPair a -> a
capArbitrary :: a
} deriving (ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool
(ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool)
-> (ConstructorArbitraryPair a
-> ConstructorArbitraryPair a -> Bool)
-> Eq (ConstructorArbitraryPair a)
forall a.
Eq a =>
ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool
$c/= :: forall a.
Eq a =>
ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool
== :: ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool
$c== :: forall a.
Eq a =>
ConstructorArbitraryPair a -> ConstructorArbitraryPair a -> Bool
Eq,(forall x.
ConstructorArbitraryPair a -> Rep (ConstructorArbitraryPair a) x)
-> (forall x.
Rep (ConstructorArbitraryPair a) x -> ConstructorArbitraryPair a)
-> Generic (ConstructorArbitraryPair a)
forall x.
Rep (ConstructorArbitraryPair a) x -> ConstructorArbitraryPair a
forall x.
ConstructorArbitraryPair a -> Rep (ConstructorArbitraryPair a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x.
Rep (ConstructorArbitraryPair a) x -> ConstructorArbitraryPair a
forall a x.
ConstructorArbitraryPair a -> Rep (ConstructorArbitraryPair a) x
$cto :: forall a x.
Rep (ConstructorArbitraryPair a) x -> ConstructorArbitraryPair a
$cfrom :: forall a x.
ConstructorArbitraryPair a -> Rep (ConstructorArbitraryPair a) x
Generic,ReadPrec [ConstructorArbitraryPair a]
ReadPrec (ConstructorArbitraryPair a)
Int -> ReadS (ConstructorArbitraryPair a)
ReadS [ConstructorArbitraryPair a]
(Int -> ReadS (ConstructorArbitraryPair a))
-> ReadS [ConstructorArbitraryPair a]
-> ReadPrec (ConstructorArbitraryPair a)
-> ReadPrec [ConstructorArbitraryPair a]
-> Read (ConstructorArbitraryPair a)
forall a. Read a => ReadPrec [ConstructorArbitraryPair a]
forall a. Read a => ReadPrec (ConstructorArbitraryPair a)
forall a. Read a => Int -> ReadS (ConstructorArbitraryPair a)
forall a. Read a => ReadS [ConstructorArbitraryPair a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ConstructorArbitraryPair a]
$creadListPrec :: forall a. Read a => ReadPrec [ConstructorArbitraryPair a]
readPrec :: ReadPrec (ConstructorArbitraryPair a)
$creadPrec :: forall a. Read a => ReadPrec (ConstructorArbitraryPair a)
readList :: ReadS [ConstructorArbitraryPair a]
$creadList :: forall a. Read a => ReadS [ConstructorArbitraryPair a]
readsPrec :: Int -> ReadS (ConstructorArbitraryPair a)
$creadsPrec :: forall a. Read a => Int -> ReadS (ConstructorArbitraryPair a)
Read,Int -> ConstructorArbitraryPair a -> ShowS
[ConstructorArbitraryPair a] -> ShowS
ConstructorArbitraryPair a -> String
(Int -> ConstructorArbitraryPair a -> ShowS)
-> (ConstructorArbitraryPair a -> String)
-> ([ConstructorArbitraryPair a] -> ShowS)
-> Show (ConstructorArbitraryPair a)
forall a. Show a => Int -> ConstructorArbitraryPair a -> ShowS
forall a. Show a => [ConstructorArbitraryPair a] -> ShowS
forall a. Show a => ConstructorArbitraryPair a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConstructorArbitraryPair a] -> ShowS
$cshowList :: forall a. Show a => [ConstructorArbitraryPair a] -> ShowS
show :: ConstructorArbitraryPair a -> String
$cshow :: forall a. Show a => ConstructorArbitraryPair a -> String
showsPrec :: Int -> ConstructorArbitraryPair a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ConstructorArbitraryPair a -> ShowS
Show,Typeable)
instance Functor ConstructorArbitraryPair where
fmap :: (a -> b)
-> ConstructorArbitraryPair a -> ConstructorArbitraryPair b
fmap a -> b
f (ConstructorArbitraryPair String
c a
a) = String -> b -> ConstructorArbitraryPair b
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
c (a -> b
f a
a)
instance (Arbitrary a) => Arbitrary (ConstructorArbitraryPair a) where
arbitrary :: Gen (ConstructorArbitraryPair a)
arbitrary = String -> a -> ConstructorArbitraryPair a
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair (String -> a -> ConstructorArbitraryPair a)
-> Gen String -> Gen (a -> ConstructorArbitraryPair a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen String
forall a. Arbitrary a => Gen a
arbitrary Gen (a -> ConstructorArbitraryPair a)
-> Gen a -> Gen (ConstructorArbitraryPair a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen a
forall a. Arbitrary a => Gen a
arbitrary
data ADTArbitrarySingleton a =
ADTArbitrarySingleton
{ ADTArbitrarySingleton a -> String
adtasModuleName :: String
, ADTArbitrarySingleton a -> String
adtasTypeName :: String
, ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP :: ConstructorArbitraryPair a
} deriving (ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool
(ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool)
-> (ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool)
-> Eq (ADTArbitrarySingleton a)
forall a.
Eq a =>
ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool
$c/= :: forall a.
Eq a =>
ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool
== :: ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool
$c== :: forall a.
Eq a =>
ADTArbitrarySingleton a -> ADTArbitrarySingleton a -> Bool
Eq,(forall x.
ADTArbitrarySingleton a -> Rep (ADTArbitrarySingleton a) x)
-> (forall x.
Rep (ADTArbitrarySingleton a) x -> ADTArbitrarySingleton a)
-> Generic (ADTArbitrarySingleton a)
forall x.
Rep (ADTArbitrarySingleton a) x -> ADTArbitrarySingleton a
forall x.
ADTArbitrarySingleton a -> Rep (ADTArbitrarySingleton a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x.
Rep (ADTArbitrarySingleton a) x -> ADTArbitrarySingleton a
forall a x.
ADTArbitrarySingleton a -> Rep (ADTArbitrarySingleton a) x
$cto :: forall a x.
Rep (ADTArbitrarySingleton a) x -> ADTArbitrarySingleton a
$cfrom :: forall a x.
ADTArbitrarySingleton a -> Rep (ADTArbitrarySingleton a) x
Generic,ReadPrec [ADTArbitrarySingleton a]
ReadPrec (ADTArbitrarySingleton a)
Int -> ReadS (ADTArbitrarySingleton a)
ReadS [ADTArbitrarySingleton a]
(Int -> ReadS (ADTArbitrarySingleton a))
-> ReadS [ADTArbitrarySingleton a]
-> ReadPrec (ADTArbitrarySingleton a)
-> ReadPrec [ADTArbitrarySingleton a]
-> Read (ADTArbitrarySingleton a)
forall a. Read a => ReadPrec [ADTArbitrarySingleton a]
forall a. Read a => ReadPrec (ADTArbitrarySingleton a)
forall a. Read a => Int -> ReadS (ADTArbitrarySingleton a)
forall a. Read a => ReadS [ADTArbitrarySingleton a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ADTArbitrarySingleton a]
$creadListPrec :: forall a. Read a => ReadPrec [ADTArbitrarySingleton a]
readPrec :: ReadPrec (ADTArbitrarySingleton a)
$creadPrec :: forall a. Read a => ReadPrec (ADTArbitrarySingleton a)
readList :: ReadS [ADTArbitrarySingleton a]
$creadList :: forall a. Read a => ReadS [ADTArbitrarySingleton a]
readsPrec :: Int -> ReadS (ADTArbitrarySingleton a)
$creadsPrec :: forall a. Read a => Int -> ReadS (ADTArbitrarySingleton a)
Read,Int -> ADTArbitrarySingleton a -> ShowS
[ADTArbitrarySingleton a] -> ShowS
ADTArbitrarySingleton a -> String
(Int -> ADTArbitrarySingleton a -> ShowS)
-> (ADTArbitrarySingleton a -> String)
-> ([ADTArbitrarySingleton a] -> ShowS)
-> Show (ADTArbitrarySingleton a)
forall a. Show a => Int -> ADTArbitrarySingleton a -> ShowS
forall a. Show a => [ADTArbitrarySingleton a] -> ShowS
forall a. Show a => ADTArbitrarySingleton a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ADTArbitrarySingleton a] -> ShowS
$cshowList :: forall a. Show a => [ADTArbitrarySingleton a] -> ShowS
show :: ADTArbitrarySingleton a -> String
$cshow :: forall a. Show a => ADTArbitrarySingleton a -> String
showsPrec :: Int -> ADTArbitrarySingleton a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ADTArbitrarySingleton a -> ShowS
Show,Typeable)
instance Functor ADTArbitrarySingleton where
fmap :: (a -> b) -> ADTArbitrarySingleton a -> ADTArbitrarySingleton b
fmap a -> b
f (ADTArbitrarySingleton String
m String
t ConstructorArbitraryPair a
c) = String
-> String -> ConstructorArbitraryPair b -> ADTArbitrarySingleton b
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton String
m String
t (a -> b
f (a -> b)
-> ConstructorArbitraryPair a -> ConstructorArbitraryPair b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ConstructorArbitraryPair a
c)
instance (Arbitrary a) => Arbitrary (ADTArbitrarySingleton a) where
arbitrary :: Gen (ADTArbitrarySingleton a)
arbitrary = String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton (String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a)
-> Gen String
-> Gen
(String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen String
forall a. Arbitrary a => Gen a
arbitrary Gen
(String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a)
-> Gen String
-> Gen (ConstructorArbitraryPair a -> ADTArbitrarySingleton a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen String
forall a. Arbitrary a => Gen a
arbitrary Gen (ConstructorArbitraryPair a -> ADTArbitrarySingleton a)
-> Gen (ConstructorArbitraryPair a)
-> Gen (ADTArbitrarySingleton a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (ConstructorArbitraryPair a)
forall a. Arbitrary a => Gen a
arbitrary
data ADTArbitrary a =
ADTArbitrary
{ ADTArbitrary a -> String
adtModuleName :: String
, ADTArbitrary a -> String
adtTypeName :: String
, ADTArbitrary a -> [ConstructorArbitraryPair a]
adtCAPs :: [ConstructorArbitraryPair a]
} deriving (ADTArbitrary a -> ADTArbitrary a -> Bool
(ADTArbitrary a -> ADTArbitrary a -> Bool)
-> (ADTArbitrary a -> ADTArbitrary a -> Bool)
-> Eq (ADTArbitrary a)
forall a. Eq a => ADTArbitrary a -> ADTArbitrary a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ADTArbitrary a -> ADTArbitrary a -> Bool
$c/= :: forall a. Eq a => ADTArbitrary a -> ADTArbitrary a -> Bool
== :: ADTArbitrary a -> ADTArbitrary a -> Bool
$c== :: forall a. Eq a => ADTArbitrary a -> ADTArbitrary a -> Bool
Eq,(forall x. ADTArbitrary a -> Rep (ADTArbitrary a) x)
-> (forall x. Rep (ADTArbitrary a) x -> ADTArbitrary a)
-> Generic (ADTArbitrary a)
forall x. Rep (ADTArbitrary a) x -> ADTArbitrary a
forall x. ADTArbitrary a -> Rep (ADTArbitrary a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (ADTArbitrary a) x -> ADTArbitrary a
forall a x. ADTArbitrary a -> Rep (ADTArbitrary a) x
$cto :: forall a x. Rep (ADTArbitrary a) x -> ADTArbitrary a
$cfrom :: forall a x. ADTArbitrary a -> Rep (ADTArbitrary a) x
Generic,ReadPrec [ADTArbitrary a]
ReadPrec (ADTArbitrary a)
Int -> ReadS (ADTArbitrary a)
ReadS [ADTArbitrary a]
(Int -> ReadS (ADTArbitrary a))
-> ReadS [ADTArbitrary a]
-> ReadPrec (ADTArbitrary a)
-> ReadPrec [ADTArbitrary a]
-> Read (ADTArbitrary a)
forall a. Read a => ReadPrec [ADTArbitrary a]
forall a. Read a => ReadPrec (ADTArbitrary a)
forall a. Read a => Int -> ReadS (ADTArbitrary a)
forall a. Read a => ReadS [ADTArbitrary a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ADTArbitrary a]
$creadListPrec :: forall a. Read a => ReadPrec [ADTArbitrary a]
readPrec :: ReadPrec (ADTArbitrary a)
$creadPrec :: forall a. Read a => ReadPrec (ADTArbitrary a)
readList :: ReadS [ADTArbitrary a]
$creadList :: forall a. Read a => ReadS [ADTArbitrary a]
readsPrec :: Int -> ReadS (ADTArbitrary a)
$creadsPrec :: forall a. Read a => Int -> ReadS (ADTArbitrary a)
Read,Int -> ADTArbitrary a -> ShowS
[ADTArbitrary a] -> ShowS
ADTArbitrary a -> String
(Int -> ADTArbitrary a -> ShowS)
-> (ADTArbitrary a -> String)
-> ([ADTArbitrary a] -> ShowS)
-> Show (ADTArbitrary a)
forall a. Show a => Int -> ADTArbitrary a -> ShowS
forall a. Show a => [ADTArbitrary a] -> ShowS
forall a. Show a => ADTArbitrary a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ADTArbitrary a] -> ShowS
$cshowList :: forall a. Show a => [ADTArbitrary a] -> ShowS
show :: ADTArbitrary a -> String
$cshow :: forall a. Show a => ADTArbitrary a -> String
showsPrec :: Int -> ADTArbitrary a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ADTArbitrary a -> ShowS
Show,Typeable)
instance Functor ADTArbitrary where
fmap :: (a -> b) -> ADTArbitrary a -> ADTArbitrary b
fmap a -> b
f (ADTArbitrary String
m String
t [ConstructorArbitraryPair a]
cs) = String -> String -> [ConstructorArbitraryPair b] -> ADTArbitrary b
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary String
m String
t ((a -> b)
-> ConstructorArbitraryPair a -> ConstructorArbitraryPair b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f (ConstructorArbitraryPair a -> ConstructorArbitraryPair b)
-> [ConstructorArbitraryPair a] -> [ConstructorArbitraryPair b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [ConstructorArbitraryPair a]
cs)
instance (Arbitrary a) => Arbitrary (ADTArbitrary a) where
arbitrary :: Gen (ADTArbitrary a)
arbitrary = String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary (String
-> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a)
-> Gen String
-> Gen (String -> [ConstructorArbitraryPair a] -> ADTArbitrary a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen String
forall a. Arbitrary a => Gen a
arbitrary Gen (String -> [ConstructorArbitraryPair a] -> ADTArbitrary a)
-> Gen String
-> Gen ([ConstructorArbitraryPair a] -> ADTArbitrary a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen String
forall a. Arbitrary a => Gen a
arbitrary Gen ([ConstructorArbitraryPair a] -> ADTArbitrary a)
-> Gen [ConstructorArbitraryPair a] -> Gen (ADTArbitrary a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen [ConstructorArbitraryPair a]
forall a. Arbitrary a => Gen a
arbitrary
class ToADTArbitrary a where
toADTArbitrarySingleton :: Proxy a -> Gen (ADTArbitrarySingleton a)
default toADTArbitrarySingleton ::
( Generic a
, GToADTArbitrarySingleton (Rep a)
)
=> Proxy a
-> Gen (ADTArbitrarySingleton a)
toADTArbitrarySingleton Proxy a
_ = (Rep a Any -> a)
-> ADTArbitrarySingleton (Rep a Any) -> ADTArbitrarySingleton a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to (ADTArbitrarySingleton (Rep a Any) -> ADTArbitrarySingleton a)
-> Gen (ADTArbitrarySingleton (Rep a Any))
-> Gen (ADTArbitrarySingleton a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy (Rep a) -> Gen (ADTArbitrarySingleton (Rep a Any))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy (Rep a)
forall k (t :: k). Proxy t
Proxy :: Proxy (Rep a))
toADTArbitrary :: Proxy a -> Gen (ADTArbitrary a)
default toADTArbitrary ::
( Generic a
, GToADTArbitrary (Rep a)
)
=> Proxy a
-> Gen (ADTArbitrary a)
toADTArbitrary Proxy a
_ = (Rep a Any -> a) -> ADTArbitrary (Rep a Any) -> ADTArbitrary a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to (ADTArbitrary (Rep a Any) -> ADTArbitrary a)
-> Gen (ADTArbitrary (Rep a Any)) -> Gen (ADTArbitrary a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy (Rep a) -> Gen (ADTArbitrary (Rep a Any))
forall (rep :: * -> *) a.
GToADTArbitrary rep =>
Proxy rep -> Gen (ADTArbitrary (rep a))
gToADTArbitrary (Proxy (Rep a)
forall k (t :: k). Proxy t
Proxy :: Proxy (Rep a))
class GToADTArbitrarySingleton rep where
gToADTArbitrarySingleton :: Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
instance GToADTArbitrarySingleton U1 where
gToADTArbitrarySingleton :: Proxy U1 -> Gen (ADTArbitrarySingleton (U1 a))
gToADTArbitrarySingleton Proxy U1
_ = ADTArbitrarySingleton (U1 a) -> Gen (ADTArbitrarySingleton (U1 a))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ADTArbitrarySingleton (U1 a)
-> Gen (ADTArbitrarySingleton (U1 a)))
-> ADTArbitrarySingleton (U1 a)
-> Gen (ADTArbitrarySingleton (U1 a))
forall a b. (a -> b) -> a -> b
$ String
-> String
-> ConstructorArbitraryPair (U1 a)
-> ADTArbitrarySingleton (U1 a)
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton String
"" String
"" (ConstructorArbitraryPair (U1 a) -> ADTArbitrarySingleton (U1 a))
-> ConstructorArbitraryPair (U1 a) -> ADTArbitrarySingleton (U1 a)
forall a b. (a -> b) -> a -> b
$ String -> U1 a -> ConstructorArbitraryPair (U1 a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
"" U1 a
forall k (p :: k). U1 p
U1
instance (GToADTArbitrarySingleton l, GToADTArbitrarySingleton r) => GToADTArbitrarySingleton (l :+: r) where
gToADTArbitrarySingleton :: Proxy (l :+: r) -> Gen (ADTArbitrarySingleton ((:+:) l r a))
gToADTArbitrarySingleton Proxy (l :+: r)
_ = do
Bool
b <- Gen Bool
forall a. Arbitrary a => Gen a
arbitrary
if Bool
b then (l a -> (:+:) l r a)
-> ADTArbitrarySingleton (l a)
-> ADTArbitrarySingleton ((:+:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap l a -> (:+:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (ADTArbitrarySingleton (l a)
-> ADTArbitrarySingleton ((:+:) l r a))
-> Gen (ADTArbitrarySingleton (l a))
-> Gen (ADTArbitrarySingleton ((:+:) l r a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy l -> Gen (ADTArbitrarySingleton (l a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy l
forall k (t :: k). Proxy t
Proxy :: Proxy l)
else (r a -> (:+:) l r a)
-> ADTArbitrarySingleton (r a)
-> ADTArbitrarySingleton ((:+:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap r a -> (:+:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (ADTArbitrarySingleton (r a)
-> ADTArbitrarySingleton ((:+:) l r a))
-> Gen (ADTArbitrarySingleton (r a))
-> Gen (ADTArbitrarySingleton ((:+:) l r a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy r -> Gen (ADTArbitrarySingleton (r a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy r
forall k (t :: k). Proxy t
Proxy :: Proxy r)
instance (GToADTArbitrarySingleton l, GToADTArbitrarySingleton r) => GToADTArbitrarySingleton (l :*: r) where
gToADTArbitrarySingleton :: Proxy (l :*: r) -> Gen (ADTArbitrarySingleton ((:*:) l r a))
gToADTArbitrarySingleton Proxy (l :*: r)
_ = do
l a
x <- ADTArbitrarySingleton (l a) -> l a
forall c. ADTArbitrarySingleton c -> c
getArb (ADTArbitrarySingleton (l a) -> l a)
-> Gen (ADTArbitrarySingleton (l a)) -> Gen (l a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy l -> Gen (ADTArbitrarySingleton (l a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy l
forall k (t :: k). Proxy t
Proxy :: Proxy l)
r a
y <- ADTArbitrarySingleton (r a) -> r a
forall c. ADTArbitrarySingleton c -> c
getArb (ADTArbitrarySingleton (r a) -> r a)
-> Gen (ADTArbitrarySingleton (r a)) -> Gen (r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy r -> Gen (ADTArbitrarySingleton (r a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy r
forall k (t :: k). Proxy t
Proxy :: Proxy r)
ADTArbitrarySingleton ((:*:) l r a)
-> Gen (ADTArbitrarySingleton ((:*:) l r a))
forall (m :: * -> *) a. Monad m => a -> m a
return (ADTArbitrarySingleton ((:*:) l r a)
-> Gen (ADTArbitrarySingleton ((:*:) l r a)))
-> ADTArbitrarySingleton ((:*:) l r a)
-> Gen (ADTArbitrarySingleton ((:*:) l r a))
forall a b. (a -> b) -> a -> b
$ String
-> String
-> ConstructorArbitraryPair ((:*:) l r a)
-> ADTArbitrarySingleton ((:*:) l r a)
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton String
"" String
"" (ConstructorArbitraryPair ((:*:) l r a)
-> ADTArbitrarySingleton ((:*:) l r a))
-> ConstructorArbitraryPair ((:*:) l r a)
-> ADTArbitrarySingleton ((:*:) l r a)
forall a b. (a -> b) -> a -> b
$ String -> (:*:) l r a -> ConstructorArbitraryPair ((:*:) l r a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
"" (l a
x l a -> r a -> (:*:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*: r a
y)
where
getArb :: ADTArbitrarySingleton c -> c
getArb = ConstructorArbitraryPair c -> c
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair c -> c)
-> (ADTArbitrarySingleton c -> ConstructorArbitraryPair c)
-> ADTArbitrarySingleton c
-> c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrarySingleton c -> ConstructorArbitraryPair c
forall a. ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP
instance Arbitrary a => GToADTArbitrarySingleton (K1 i a) where
gToADTArbitrarySingleton :: Proxy (K1 i a) -> Gen (ADTArbitrarySingleton (K1 i a a))
gToADTArbitrarySingleton Proxy (K1 i a)
_ =
String
-> String
-> ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrarySingleton (K1 i a a)
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton
(String
-> String
-> ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrarySingleton (K1 i a a))
-> Gen String
-> Gen
(String
-> ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrarySingleton (K1 i a a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen
(String
-> ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrarySingleton (K1 i a a))
-> Gen String
-> Gen
(ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrarySingleton (K1 i a a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen
(ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrarySingleton (K1 i a a))
-> Gen (ConstructorArbitraryPair (K1 i a a))
-> Gen (ADTArbitrarySingleton (K1 i a a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (String -> K1 i a a -> ConstructorArbitraryPair (K1 i a a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair
(String -> K1 i a a -> ConstructorArbitraryPair (K1 i a a))
-> (a -> String)
-> a
-> K1 i a a
-> ConstructorArbitraryPair (K1 i a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> a -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
(a -> K1 i a a -> ConstructorArbitraryPair (K1 i a a))
-> (a -> K1 i a a) -> a -> ConstructorArbitraryPair (K1 i a a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> a -> K1 i a a
forall k i c (p :: k). c -> K1 i c p
K1 (a -> ConstructorArbitraryPair (K1 i a a))
-> Gen a -> Gen (ConstructorArbitraryPair (K1 i a a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
forall a. Arbitrary a => Gen a
arbitrary)
instance (Constructor c, GToADTArbitrarySingleton rep) => GToADTArbitrarySingleton (M1 C c rep) where
gToADTArbitrarySingleton :: Proxy (M1 C c rep) -> Gen (ADTArbitrarySingleton (M1 C c rep a))
gToADTArbitrarySingleton Proxy (M1 C c rep)
_ =
String
-> String
-> ConstructorArbitraryPair (M1 C c rep a)
-> ADTArbitrarySingleton (M1 C c rep a)
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton
(String
-> String
-> ConstructorArbitraryPair (M1 C c rep a)
-> ADTArbitrarySingleton (M1 C c rep a))
-> Gen String
-> Gen
(String
-> ConstructorArbitraryPair (M1 C c rep a)
-> ADTArbitrarySingleton (M1 C c rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen
(String
-> ConstructorArbitraryPair (M1 C c rep a)
-> ADTArbitrarySingleton (M1 C c rep a))
-> Gen String
-> Gen
(ConstructorArbitraryPair (M1 C c rep a)
-> ADTArbitrarySingleton (M1 C c rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen
(ConstructorArbitraryPair (M1 C c rep a)
-> ADTArbitrarySingleton (M1 C c rep a))
-> Gen (ConstructorArbitraryPair (M1 C c rep a))
-> Gen (ADTArbitrarySingleton (M1 C c rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (String -> M1 C c rep a -> ConstructorArbitraryPair (M1 C c rep a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
con (M1 C c rep a -> ConstructorArbitraryPair (M1 C c rep a))
-> Gen (M1 C c rep a)
-> Gen (ConstructorArbitraryPair (M1 C c rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (M1 C c rep a)
forall i (c :: Meta) p. Gen (M1 i c rep p)
ac)
where
kRep :: Gen (ADTArbitrarySingleton (rep a))
kRep = Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy rep
forall k (t :: k). Proxy t
Proxy :: Proxy rep)
ac :: Gen (M1 i c rep p)
ac = rep p -> M1 i c rep p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (rep p -> M1 i c rep p)
-> (ADTArbitrarySingleton (rep p) -> rep p)
-> ADTArbitrarySingleton (rep p)
-> M1 i c rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstructorArbitraryPair (rep p) -> rep p
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair (rep p) -> rep p)
-> (ADTArbitrarySingleton (rep p)
-> ConstructorArbitraryPair (rep p))
-> ADTArbitrarySingleton (rep p)
-> rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrarySingleton (rep p) -> ConstructorArbitraryPair (rep p)
forall a. ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP (ADTArbitrarySingleton (rep p) -> M1 i c rep p)
-> Gen (ADTArbitrarySingleton (rep p)) -> Gen (M1 i c rep p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrarySingleton (rep p))
forall a. Gen (ADTArbitrarySingleton (rep a))
kRep
con :: String
con = M1 C c rep () -> String
forall k (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
conName (M1 C c rep ()
forall a. HasCallStack => a
undefined :: M1 C c rep ())
instance (Datatype t, Typeable t, GToADTArbitrarySingleton rep) => GToADTArbitrarySingleton (M1 D t rep) where
gToADTArbitrarySingleton :: Proxy (M1 D t rep) -> Gen (ADTArbitrarySingleton (M1 D t rep a))
gToADTArbitrarySingleton Proxy (M1 D t rep)
_ =
String
-> String
-> ConstructorArbitraryPair (M1 D t rep a)
-> ADTArbitrarySingleton (M1 D t rep a)
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton
(String
-> String
-> ConstructorArbitraryPair (M1 D t rep a)
-> ADTArbitrarySingleton (M1 D t rep a))
-> Gen String
-> Gen
(String
-> ConstructorArbitraryPair (M1 D t rep a)
-> ADTArbitrarySingleton (M1 D t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
m
Gen
(String
-> ConstructorArbitraryPair (M1 D t rep a)
-> ADTArbitrarySingleton (M1 D t rep a))
-> Gen String
-> Gen
(ConstructorArbitraryPair (M1 D t rep a)
-> ADTArbitrarySingleton (M1 D t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
t
Gen
(ConstructorArbitraryPair (M1 D t rep a)
-> ADTArbitrarySingleton (M1 D t rep a))
-> Gen (ConstructorArbitraryPair (M1 D t rep a))
-> Gen (ADTArbitrarySingleton (M1 D t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (String -> M1 D t rep a -> ConstructorArbitraryPair (M1 D t rep a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair
(String -> M1 D t rep a -> ConstructorArbitraryPair (M1 D t rep a))
-> Gen String
-> Gen (M1 D t rep a -> ConstructorArbitraryPair (M1 D t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ConstructorArbitraryPair (rep Any) -> String
forall a. ConstructorArbitraryPair a -> String
capConstructor (ConstructorArbitraryPair (rep Any) -> String)
-> (ADTArbitrarySingleton (rep Any)
-> ConstructorArbitraryPair (rep Any))
-> ADTArbitrarySingleton (rep Any)
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrarySingleton (rep Any)
-> ConstructorArbitraryPair (rep Any)
forall a. ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP (ADTArbitrarySingleton (rep Any) -> String)
-> Gen (ADTArbitrarySingleton (rep Any)) -> Gen String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrarySingleton (rep Any))
forall a. Gen (ADTArbitrarySingleton (rep a))
kRep)
Gen (M1 D t rep a -> ConstructorArbitraryPair (M1 D t rep a))
-> Gen (M1 D t rep a)
-> Gen (ConstructorArbitraryPair (M1 D t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (M1 D t rep a)
forall i (c :: Meta) p. Gen (M1 i c rep p)
ac)
where
kRep :: Gen (ADTArbitrarySingleton (rep a))
kRep = Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy rep
forall k (t :: k). Proxy t
Proxy :: Proxy rep)
ac :: Gen (M1 i c rep p)
ac = rep p -> M1 i c rep p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (rep p -> M1 i c rep p)
-> (ADTArbitrarySingleton (rep p) -> rep p)
-> ADTArbitrarySingleton (rep p)
-> M1 i c rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstructorArbitraryPair (rep p) -> rep p
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair (rep p) -> rep p)
-> (ADTArbitrarySingleton (rep p)
-> ConstructorArbitraryPair (rep p))
-> ADTArbitrarySingleton (rep p)
-> rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrarySingleton (rep p) -> ConstructorArbitraryPair (rep p)
forall a. ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP (ADTArbitrarySingleton (rep p) -> M1 i c rep p)
-> Gen (ADTArbitrarySingleton (rep p)) -> Gen (M1 i c rep p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrarySingleton (rep p))
forall a. Gen (ADTArbitrarySingleton (rep a))
kRep
m :: String
m = M1 D t rep () -> String
forall k (d :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Datatype d =>
t d f a -> String
moduleName (M1 D t rep ()
forall a. HasCallStack => a
undefined :: M1 D t rep ())
t :: String
t = M1 D t rep () -> String
forall k (d :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Datatype d =>
t d f a -> String
datatypeName (M1 D t rep ()
forall a. HasCallStack => a
undefined :: M1 D t rep ())
instance GToADTArbitrarySingleton rep => GToADTArbitrarySingleton (M1 S t rep) where
gToADTArbitrarySingleton :: Proxy (M1 S t rep) -> Gen (ADTArbitrarySingleton (M1 S t rep a))
gToADTArbitrarySingleton Proxy (M1 S t rep)
_ =
String
-> String
-> ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrarySingleton (M1 S t rep a)
forall a.
String
-> String -> ConstructorArbitraryPair a -> ADTArbitrarySingleton a
ADTArbitrarySingleton
(String
-> String
-> ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrarySingleton (M1 S t rep a))
-> Gen String
-> Gen
(String
-> ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrarySingleton (M1 S t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen
(String
-> ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrarySingleton (M1 S t rep a))
-> Gen String
-> Gen
(ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrarySingleton (M1 S t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen
(ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrarySingleton (M1 S t rep a))
-> Gen (ConstructorArbitraryPair (M1 S t rep a))
-> Gen (ADTArbitrarySingleton (M1 S t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (String -> M1 S t rep a -> ConstructorArbitraryPair (M1 S t rep a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair
(String -> M1 S t rep a -> ConstructorArbitraryPair (M1 S t rep a))
-> Gen String
-> Gen (M1 S t rep a -> ConstructorArbitraryPair (M1 S t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
Gen (M1 S t rep a -> ConstructorArbitraryPair (M1 S t rep a))
-> Gen (M1 S t rep a)
-> Gen (ConstructorArbitraryPair (M1 S t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (M1 S t rep a)
forall i (c :: Meta) p. Gen (M1 i c rep p)
ac)
where
kRep :: Gen (ADTArbitrarySingleton (rep a))
kRep = Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy rep
forall k (t :: k). Proxy t
Proxy :: Proxy rep)
ac :: Gen (M1 i c rep p)
ac = rep p -> M1 i c rep p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (rep p -> M1 i c rep p)
-> (ADTArbitrarySingleton (rep p) -> rep p)
-> ADTArbitrarySingleton (rep p)
-> M1 i c rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstructorArbitraryPair (rep p) -> rep p
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair (rep p) -> rep p)
-> (ADTArbitrarySingleton (rep p)
-> ConstructorArbitraryPair (rep p))
-> ADTArbitrarySingleton (rep p)
-> rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrarySingleton (rep p) -> ConstructorArbitraryPair (rep p)
forall a. ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP (ADTArbitrarySingleton (rep p) -> M1 i c rep p)
-> Gen (ADTArbitrarySingleton (rep p)) -> Gen (M1 i c rep p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrarySingleton (rep p))
forall a. Gen (ADTArbitrarySingleton (rep a))
kRep
class GToADTArbitrary rep where
gToADTArbitrary :: Proxy rep -> Gen (ADTArbitrary (rep a))
instance GToADTArbitrary U1 where
gToADTArbitrary :: Proxy U1 -> Gen (ADTArbitrary (U1 a))
gToADTArbitrary Proxy U1
_ = ADTArbitrary (U1 a) -> Gen (ADTArbitrary (U1 a))
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ADTArbitrary (U1 a) -> Gen (ADTArbitrary (U1 a)))
-> ADTArbitrary (U1 a) -> Gen (ADTArbitrary (U1 a))
forall a b. (a -> b) -> a -> b
$ String
-> String
-> [ConstructorArbitraryPair (U1 a)]
-> ADTArbitrary (U1 a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary String
"" String
"" [String -> U1 a -> ConstructorArbitraryPair (U1 a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
"" U1 a
forall k (p :: k). U1 p
U1]
instance (GToADTArbitrary l, GToADTArbitrary r) => GToADTArbitrary (l :+: r) where
gToADTArbitrary :: Proxy (l :+: r) -> Gen (ADTArbitrary ((:+:) l r a))
gToADTArbitrary Proxy (l :+: r)
_ = do
ADTArbitrary ((:+:) l r a)
a <- (l a -> (:+:) l r a)
-> ADTArbitrary (l a) -> ADTArbitrary ((:+:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap l a -> (:+:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (ADTArbitrary (l a) -> ADTArbitrary ((:+:) l r a))
-> Gen (ADTArbitrary (l a)) -> Gen (ADTArbitrary ((:+:) l r a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy l -> Gen (ADTArbitrary (l a))
forall (rep :: * -> *) a.
GToADTArbitrary rep =>
Proxy rep -> Gen (ADTArbitrary (rep a))
gToADTArbitrary (Proxy l
forall k (t :: k). Proxy t
Proxy :: Proxy l)
ADTArbitrary ((:+:) l r a)
b <- (r a -> (:+:) l r a)
-> ADTArbitrary (r a) -> ADTArbitrary ((:+:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap r a -> (:+:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (ADTArbitrary (r a) -> ADTArbitrary ((:+:) l r a))
-> Gen (ADTArbitrary (r a)) -> Gen (ADTArbitrary ((:+:) l r a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy r -> Gen (ADTArbitrary (r a))
forall (rep :: * -> *) a.
GToADTArbitrary rep =>
Proxy rep -> Gen (ADTArbitrary (rep a))
gToADTArbitrary (Proxy r
forall k (t :: k). Proxy t
Proxy :: Proxy r)
ADTArbitrary ((:+:) l r a) -> Gen (ADTArbitrary ((:+:) l r a))
forall (m :: * -> *) a. Monad m => a -> m a
return (ADTArbitrary ((:+:) l r a) -> Gen (ADTArbitrary ((:+:) l r a)))
-> ADTArbitrary ((:+:) l r a) -> Gen (ADTArbitrary ((:+:) l r a))
forall a b. (a -> b) -> a -> b
$ String
-> String
-> [ConstructorArbitraryPair ((:+:) l r a)]
-> ADTArbitrary ((:+:) l r a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary String
"" String
"" (ADTArbitrary ((:+:) l r a)
-> [ConstructorArbitraryPair ((:+:) l r a)]
forall a. ADTArbitrary a -> [ConstructorArbitraryPair a]
adtCAPs ADTArbitrary ((:+:) l r a)
a [ConstructorArbitraryPair ((:+:) l r a)]
-> [ConstructorArbitraryPair ((:+:) l r a)]
-> [ConstructorArbitraryPair ((:+:) l r a)]
forall a. [a] -> [a] -> [a]
++ ADTArbitrary ((:+:) l r a)
-> [ConstructorArbitraryPair ((:+:) l r a)]
forall a. ADTArbitrary a -> [ConstructorArbitraryPair a]
adtCAPs ADTArbitrary ((:+:) l r a)
b)
instance (GToADTArbitrarySingleton l, GToADTArbitrarySingleton r) => GToADTArbitrary (l :*: r) where
gToADTArbitrary :: Proxy (l :*: r) -> Gen (ADTArbitrary ((:*:) l r a))
gToADTArbitrary Proxy (l :*: r)
_ = do
l a
x <- ADTArbitrarySingleton (l a) -> l a
forall c. ADTArbitrarySingleton c -> c
getArb (ADTArbitrarySingleton (l a) -> l a)
-> Gen (ADTArbitrarySingleton (l a)) -> Gen (l a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy l -> Gen (ADTArbitrarySingleton (l a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy l
forall k (t :: k). Proxy t
Proxy :: Proxy l)
r a
y <- ADTArbitrarySingleton (r a) -> r a
forall c. ADTArbitrarySingleton c -> c
getArb (ADTArbitrarySingleton (r a) -> r a)
-> Gen (ADTArbitrarySingleton (r a)) -> Gen (r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Proxy r -> Gen (ADTArbitrarySingleton (r a))
forall (rep :: * -> *) a.
GToADTArbitrarySingleton rep =>
Proxy rep -> Gen (ADTArbitrarySingleton (rep a))
gToADTArbitrarySingleton (Proxy r
forall k (t :: k). Proxy t
Proxy :: Proxy r)
ADTArbitrary ((:*:) l r a) -> Gen (ADTArbitrary ((:*:) l r a))
forall (m :: * -> *) a. Monad m => a -> m a
return (ADTArbitrary ((:*:) l r a) -> Gen (ADTArbitrary ((:*:) l r a)))
-> ADTArbitrary ((:*:) l r a) -> Gen (ADTArbitrary ((:*:) l r a))
forall a b. (a -> b) -> a -> b
$ String
-> String
-> [ConstructorArbitraryPair ((:*:) l r a)]
-> ADTArbitrary ((:*:) l r a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary String
"" String
"" [String -> (:*:) l r a -> ConstructorArbitraryPair ((:*:) l r a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
"" (l a
x l a -> r a -> (:*:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
:*: r a
y)]
where
getArb :: ADTArbitrarySingleton c -> c
getArb = ConstructorArbitraryPair c -> c
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair c -> c)
-> (ADTArbitrarySingleton c -> ConstructorArbitraryPair c)
-> ADTArbitrarySingleton c
-> c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrarySingleton c -> ConstructorArbitraryPair c
forall a. ADTArbitrarySingleton a -> ConstructorArbitraryPair a
adtasCAP
instance Arbitrary a => GToADTArbitrary (K1 i a) where
gToADTArbitrary :: Proxy (K1 i a) -> Gen (ADTArbitrary (K1 i a a))
gToADTArbitrary Proxy (K1 i a)
_ =
String
-> String
-> [ConstructorArbitraryPair (K1 i a a)]
-> ADTArbitrary (K1 i a a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary
(String
-> String
-> [ConstructorArbitraryPair (K1 i a a)]
-> ADTArbitrary (K1 i a a))
-> (ConstructorArbitraryPair (K1 i a a) -> String)
-> ConstructorArbitraryPair (K1 i a a)
-> String
-> [ConstructorArbitraryPair (K1 i a a)]
-> ADTArbitrary (K1 i a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> ConstructorArbitraryPair (K1 i a a) -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
(ConstructorArbitraryPair (K1 i a a)
-> String
-> [ConstructorArbitraryPair (K1 i a a)]
-> ADTArbitrary (K1 i a a))
-> (ConstructorArbitraryPair (K1 i a a) -> String)
-> ConstructorArbitraryPair (K1 i a a)
-> [ConstructorArbitraryPair (K1 i a a)]
-> ADTArbitrary (K1 i a a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> ConstructorArbitraryPair (K1 i a a) -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
(ConstructorArbitraryPair (K1 i a a)
-> [ConstructorArbitraryPair (K1 i a a)]
-> ADTArbitrary (K1 i a a))
-> (ConstructorArbitraryPair (K1 i a a)
-> [ConstructorArbitraryPair (K1 i a a)])
-> ConstructorArbitraryPair (K1 i a a)
-> ADTArbitrary (K1 i a a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (ConstructorArbitraryPair (K1 i a a)
-> [ConstructorArbitraryPair (K1 i a a)]
-> [ConstructorArbitraryPair (K1 i a a)]
forall a. a -> [a] -> [a]
:[]) (ConstructorArbitraryPair (K1 i a a) -> ADTArbitrary (K1 i a a))
-> Gen (ConstructorArbitraryPair (K1 i a a))
-> Gen (ADTArbitrary (K1 i a a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ConstructorArbitraryPair (K1 i a a))
forall i p. Gen (ConstructorArbitraryPair (K1 i a p))
genCap
where
arb :: Gen a
arb = Gen a
forall a. Arbitrary a => Gen a
arbitrary :: Gen a
genCap :: Gen (ConstructorArbitraryPair (K1 i a p))
genCap = String -> K1 i a p -> ConstructorArbitraryPair (K1 i a p)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair (String -> K1 i a p -> ConstructorArbitraryPair (K1 i a p))
-> Gen String
-> Gen (K1 i a p -> ConstructorArbitraryPair (K1 i a p))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
"" Gen (K1 i a p -> ConstructorArbitraryPair (K1 i a p))
-> Gen (K1 i a p) -> Gen (ConstructorArbitraryPair (K1 i a p))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (a -> K1 i a p
forall k i c (p :: k). c -> K1 i c p
K1 (a -> K1 i a p) -> Gen a -> Gen (K1 i a p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
arb)
instance (Constructor c, GToADTArbitrary rep) => GToADTArbitrary (M1 C c rep) where
gToADTArbitrary :: Proxy (M1 C c rep) -> Gen (ADTArbitrary (M1 C c rep a))
gToADTArbitrary Proxy (M1 C c rep)
_ = String
-> String
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> ADTArbitrary (M1 C c rep a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary (String
-> String
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> ADTArbitrary (M1 C c rep a))
-> (M1 C c rep a -> String)
-> M1 C c rep a
-> String
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> ADTArbitrary (M1 C c rep a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> M1 C c rep a -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
"" (M1 C c rep a
-> String
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> ADTArbitrary (M1 C c rep a))
-> (M1 C c rep a -> String)
-> M1 C c rep a
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> ADTArbitrary (M1 C c rep a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> M1 C c rep a -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
"" (M1 C c rep a
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> ADTArbitrary (M1 C c rep a))
-> (M1 C c rep a -> [ConstructorArbitraryPair (M1 C c rep a)])
-> M1 C c rep a
-> ADTArbitrary (M1 C c rep a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (ConstructorArbitraryPair (M1 C c rep a)
-> [ConstructorArbitraryPair (M1 C c rep a)]
-> [ConstructorArbitraryPair (M1 C c rep a)]
forall a. a -> [a] -> [a]
:[]) (ConstructorArbitraryPair (M1 C c rep a)
-> [ConstructorArbitraryPair (M1 C c rep a)])
-> (M1 C c rep a -> ConstructorArbitraryPair (M1 C c rep a))
-> M1 C c rep a
-> [ConstructorArbitraryPair (M1 C c rep a)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> M1 C c rep a -> ConstructorArbitraryPair (M1 C c rep a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
con (M1 C c rep a -> ADTArbitrary (M1 C c rep a))
-> Gen (M1 C c rep a) -> Gen (ADTArbitrary (M1 C c rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (M1 C c rep a)
forall i (c :: Meta) p. Gen (M1 i c rep p)
ac
where
kRep :: Gen (ADTArbitrary (rep a))
kRep = Proxy rep -> Gen (ADTArbitrary (rep a))
forall (rep :: * -> *) a.
GToADTArbitrary rep =>
Proxy rep -> Gen (ADTArbitrary (rep a))
gToADTArbitrary (Proxy rep
forall k (t :: k). Proxy t
Proxy :: Proxy rep)
ac :: Gen (M1 i c rep p)
ac = rep p -> M1 i c rep p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (rep p -> M1 i c rep p)
-> (ADTArbitrary (rep p) -> rep p)
-> ADTArbitrary (rep p)
-> M1 i c rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstructorArbitraryPair (rep p) -> rep p
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair (rep p) -> rep p)
-> (ADTArbitrary (rep p) -> ConstructorArbitraryPair (rep p))
-> ADTArbitrary (rep p)
-> rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ConstructorArbitraryPair (rep p)]
-> ConstructorArbitraryPair (rep p)
forall a. [a] -> a
head ([ConstructorArbitraryPair (rep p)]
-> ConstructorArbitraryPair (rep p))
-> (ADTArbitrary (rep p) -> [ConstructorArbitraryPair (rep p)])
-> ADTArbitrary (rep p)
-> ConstructorArbitraryPair (rep p)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrary (rep p) -> [ConstructorArbitraryPair (rep p)]
forall a. ADTArbitrary a -> [ConstructorArbitraryPair a]
adtCAPs (ADTArbitrary (rep p) -> M1 i c rep p)
-> Gen (ADTArbitrary (rep p)) -> Gen (M1 i c rep p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrary (rep p))
forall a. Gen (ADTArbitrary (rep a))
kRep
con :: String
con = M1 C c rep () -> String
forall k (c :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Constructor c =>
t c f a -> String
conName (M1 C c rep ()
forall a. HasCallStack => a
undefined :: M1 C c rep ())
instance (Datatype t, GToADTArbitrary rep) => GToADTArbitrary (M1 D t rep) where
gToADTArbitrary :: Proxy (M1 D t rep) -> Gen (ADTArbitrary (M1 D t rep a))
gToADTArbitrary Proxy (M1 D t rep)
_ = String
-> String
-> [ConstructorArbitraryPair (M1 D t rep a)]
-> ADTArbitrary (M1 D t rep a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary (String
-> String
-> [ConstructorArbitraryPair (M1 D t rep a)]
-> ADTArbitrary (M1 D t rep a))
-> Gen String
-> Gen
(String
-> [ConstructorArbitraryPair (M1 D t rep a)]
-> ADTArbitrary (M1 D t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
m Gen
(String
-> [ConstructorArbitraryPair (M1 D t rep a)]
-> ADTArbitrary (M1 D t rep a))
-> Gen String
-> Gen
([ConstructorArbitraryPair (M1 D t rep a)]
-> ADTArbitrary (M1 D t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> Gen String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
t Gen
([ConstructorArbitraryPair (M1 D t rep a)]
-> ADTArbitrary (M1 D t rep a))
-> Gen [ConstructorArbitraryPair (M1 D t rep a)]
-> Gen (ADTArbitrary (M1 D t rep a))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen [ConstructorArbitraryPair (M1 D t rep a)]
forall i (c :: Meta) p.
Gen [ConstructorArbitraryPair (M1 i c rep p)]
m1caps
where
kRep :: Gen (ADTArbitrary (rep a))
kRep = Proxy rep -> Gen (ADTArbitrary (rep a))
forall (rep :: * -> *) a.
GToADTArbitrary rep =>
Proxy rep -> Gen (ADTArbitrary (rep a))
gToADTArbitrary (Proxy rep
forall k (t :: k). Proxy t
Proxy :: Proxy rep)
caps :: Gen [ConstructorArbitraryPair (rep a)]
caps = ADTArbitrary (rep a) -> [ConstructorArbitraryPair (rep a)]
forall a. ADTArbitrary a -> [ConstructorArbitraryPair a]
adtCAPs (ADTArbitrary (rep a) -> [ConstructorArbitraryPair (rep a)])
-> Gen (ADTArbitrary (rep a))
-> Gen [ConstructorArbitraryPair (rep a)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrary (rep a))
forall a. Gen (ADTArbitrary (rep a))
kRep
m1caps :: Gen [ConstructorArbitraryPair (M1 i c rep p)]
m1caps = ((ConstructorArbitraryPair (rep p)
-> ConstructorArbitraryPair (M1 i c rep p))
-> [ConstructorArbitraryPair (rep p)]
-> [ConstructorArbitraryPair (M1 i c rep p)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((ConstructorArbitraryPair (rep p)
-> ConstructorArbitraryPair (M1 i c rep p))
-> [ConstructorArbitraryPair (rep p)]
-> [ConstructorArbitraryPair (M1 i c rep p)])
-> ((rep p -> M1 i c rep p)
-> ConstructorArbitraryPair (rep p)
-> ConstructorArbitraryPair (M1 i c rep p))
-> (rep p -> M1 i c rep p)
-> [ConstructorArbitraryPair (rep p)]
-> [ConstructorArbitraryPair (M1 i c rep p)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (rep p -> M1 i c rep p)
-> ConstructorArbitraryPair (rep p)
-> ConstructorArbitraryPair (M1 i c rep p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap) rep p -> M1 i c rep p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 ([ConstructorArbitraryPair (rep p)]
-> [ConstructorArbitraryPair (M1 i c rep p)])
-> Gen [ConstructorArbitraryPair (rep p)]
-> Gen [ConstructorArbitraryPair (M1 i c rep p)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen [ConstructorArbitraryPair (rep p)]
forall a. Gen [ConstructorArbitraryPair (rep a)]
caps
m :: String
m = M1 D t rep () -> String
forall k (d :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Datatype d =>
t d f a -> String
moduleName (M1 D t rep ()
forall a. HasCallStack => a
undefined :: M1 D t rep ())
t :: String
t = M1 D t rep () -> String
forall k (d :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Datatype d =>
t d f a -> String
datatypeName (M1 D t rep ()
forall a. HasCallStack => a
undefined :: M1 D t rep ())
instance GToADTArbitrary rep => GToADTArbitrary (M1 S t rep) where
gToADTArbitrary :: Proxy (M1 S t rep) -> Gen (ADTArbitrary (M1 S t rep a))
gToADTArbitrary Proxy (M1 S t rep)
_ =
String
-> String
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> ADTArbitrary (M1 S t rep a)
forall a.
String -> String -> [ConstructorArbitraryPair a] -> ADTArbitrary a
ADTArbitrary
(String
-> String
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> ADTArbitrary (M1 S t rep a))
-> (ConstructorArbitraryPair (M1 S t rep a) -> String)
-> ConstructorArbitraryPair (M1 S t rep a)
-> String
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> ADTArbitrary (M1 S t rep a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> ConstructorArbitraryPair (M1 S t rep a) -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
(ConstructorArbitraryPair (M1 S t rep a)
-> String
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> ADTArbitrary (M1 S t rep a))
-> (ConstructorArbitraryPair (M1 S t rep a) -> String)
-> ConstructorArbitraryPair (M1 S t rep a)
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> ADTArbitrary (M1 S t rep a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> String -> ConstructorArbitraryPair (M1 S t rep a) -> String
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
""
(ConstructorArbitraryPair (M1 S t rep a)
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> ADTArbitrary (M1 S t rep a))
-> (ConstructorArbitraryPair (M1 S t rep a)
-> [ConstructorArbitraryPair (M1 S t rep a)])
-> ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrary (M1 S t rep a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (ConstructorArbitraryPair (M1 S t rep a)
-> [ConstructorArbitraryPair (M1 S t rep a)]
-> [ConstructorArbitraryPair (M1 S t rep a)]
forall a. a -> [a] -> [a]
:[]) (ConstructorArbitraryPair (M1 S t rep a)
-> ADTArbitrary (M1 S t rep a))
-> Gen (ConstructorArbitraryPair (M1 S t rep a))
-> Gen (ADTArbitrary (M1 S t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> M1 S t rep a -> ConstructorArbitraryPair (M1 S t rep a)
forall a. String -> a -> ConstructorArbitraryPair a
ConstructorArbitraryPair String
"" (M1 S t rep a -> ConstructorArbitraryPair (M1 S t rep a))
-> Gen (M1 S t rep a)
-> Gen (ConstructorArbitraryPair (M1 S t rep a))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (M1 S t rep a)
forall i (c :: Meta) p. Gen (M1 i c rep p)
ac)
where
kRep :: Gen (ADTArbitrary (rep a))
kRep = Proxy rep -> Gen (ADTArbitrary (rep a))
forall (rep :: * -> *) a.
GToADTArbitrary rep =>
Proxy rep -> Gen (ADTArbitrary (rep a))
gToADTArbitrary (Proxy rep
forall k (t :: k). Proxy t
Proxy :: Proxy rep)
ac :: Gen (M1 i c rep p)
ac = rep p -> M1 i c rep p
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (rep p -> M1 i c rep p)
-> (ADTArbitrary (rep p) -> rep p)
-> ADTArbitrary (rep p)
-> M1 i c rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConstructorArbitraryPair (rep p) -> rep p
forall a. ConstructorArbitraryPair a -> a
capArbitrary (ConstructorArbitraryPair (rep p) -> rep p)
-> (ADTArbitrary (rep p) -> ConstructorArbitraryPair (rep p))
-> ADTArbitrary (rep p)
-> rep p
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ConstructorArbitraryPair (rep p)]
-> ConstructorArbitraryPair (rep p)
forall a. [a] -> a
head ([ConstructorArbitraryPair (rep p)]
-> ConstructorArbitraryPair (rep p))
-> (ADTArbitrary (rep p) -> [ConstructorArbitraryPair (rep p)])
-> ADTArbitrary (rep p)
-> ConstructorArbitraryPair (rep p)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ADTArbitrary (rep p) -> [ConstructorArbitraryPair (rep p)]
forall a. ADTArbitrary a -> [ConstructorArbitraryPair a]
adtCAPs (ADTArbitrary (rep p) -> M1 i c rep p)
-> Gen (ADTArbitrary (rep p)) -> Gen (M1 i c rep p)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (ADTArbitrary (rep p))
forall a. Gen (ADTArbitrary (rep a))
kRep
class GArbitrary rep where
gArbitrary :: Gen (rep a)
instance GArbitrary U1 where
gArbitrary :: Gen (U1 a)
gArbitrary = U1 a -> Gen (U1 a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure U1 a
forall k (p :: k). U1 p
U1
instance (GArbitrary l, GArbitrary r) => GArbitrary (l :+: r) where
gArbitrary :: Gen ((:+:) l r a)
gArbitrary = do
Bool
b <- Gen Bool
forall a. Arbitrary a => Gen a
arbitrary
if Bool
b then l a -> (:+:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k). f p -> (:+:) f g p
L1 (l a -> (:+:) l r a) -> Gen (l a) -> Gen ((:+:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (l a)
forall (rep :: * -> *) a. GArbitrary rep => Gen (rep a)
gArbitrary
else r a -> (:+:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k). g p -> (:+:) f g p
R1 (r a -> (:+:) l r a) -> Gen (r a) -> Gen ((:+:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (r a)
forall (rep :: * -> *) a. GArbitrary rep => Gen (rep a)
gArbitrary
instance (GArbitrary l, GArbitrary r) => GArbitrary (l :*: r) where
gArbitrary :: Gen ((:*:) l r a)
gArbitrary = l a -> r a -> (:*:) l r a
forall k (f :: k -> *) (g :: k -> *) (p :: k).
f p -> g p -> (:*:) f g p
(:*:) (l a -> r a -> (:*:) l r a)
-> Gen (l a) -> Gen (r a -> (:*:) l r a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (l a)
forall (rep :: * -> *) a. GArbitrary rep => Gen (rep a)
gArbitrary Gen (r a -> (:*:) l r a) -> Gen (r a) -> Gen ((:*:) l r a)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen (r a)
forall (rep :: * -> *) a. GArbitrary rep => Gen (rep a)
gArbitrary
instance Arbitrary a => GArbitrary (K1 i a) where
gArbitrary :: Gen (K1 i a a)
gArbitrary = a -> K1 i a a
forall k i c (p :: k). c -> K1 i c p
K1 (a -> K1 i a a) -> Gen a -> Gen (K1 i a a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen a
forall a. Arbitrary a => Gen a
arbitrary
instance GArbitrary rep => GArbitrary (M1 i t rep) where
gArbitrary :: Gen (M1 i t rep a)
gArbitrary = rep a -> M1 i t rep a
forall k i (c :: Meta) (f :: k -> *) (p :: k). f p -> M1 i c f p
M1 (rep a -> M1 i t rep a) -> Gen (rep a) -> Gen (M1 i t rep a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (rep a)
forall (rep :: * -> *) a. GArbitrary rep => Gen (rep a)
gArbitrary
genericArbitrary :: (Generic a, GArbitrary (Rep a)) => Gen a
genericArbitrary :: Gen a
genericArbitrary = Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to (Rep a Any -> a) -> Gen (Rep a Any) -> Gen a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Rep a Any)
forall (rep :: * -> *) a. GArbitrary rep => Gen (rep a)
gArbitrary